[SwiftUI] SwiftUI の View は、どれくらいの Opacity を指定するとクリックできなくなるのか

SwiftUI

SwiftUI の クリックできる View は、Opacity を 0 に設定すると、クリックできなくなりますが、どれくらいの値を設定しているとクリックできるのか調べてみました

環境&対象

以下の環境で動作確認を行なっています。

  • macOS Catalina 10.15.7
  • Xcode 12.2
  • iOS 14.2

テストコード

以下のようなアプリ/テストコードでチェックしました。

テキストをクリックすると、上部の円が黄色に変わります。(しばらくすると戻ります)

Opacity を、ゼロに近づけていって、動作を確認しました。

example code

//
//  ContentView.swift
//
//  Created by : Tomoaki Yagishita on 2020/11/29
//  © 2020  SmallDeskSoftware
//

import SwiftUI

struct ContentView: View {
    @State private var opacity: Double = 1.0
    @State private var circleColor = Color.white
    var body: some View {
        VStack {
            Circle()
                .fill(circleColor)
                .frame(width: 100)
                .overlay(Circle()
                            .strokeBorder(lineWidth: 3))
            HStack {
                Group {
                    Text("Hello, world!")
                        .opacity(opacity)
                        .onTapGesture {
                            DispatchQueue.main.async {
                                self.circleColor = .yellow
                                DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
                                                                withAnimation(.easeOut(duration: 1)  ) {self.circleColor = .white} })
                            }
                        }
                }
                .border(Color.red)
                .padding()
                Text(" <- Text ")
            }

            Slider(value: $opacity)
            TextField("opacity", value: $opacity, formatter: ContentView.numFormat)
                .padding()
            Text("Opacity : \(opacity)")
                .padding()
        }
        .padding()
    }
}

extension ContentView {
    static var numFormat: NumberFormatter = {
        let numFormat = NumberFormatter()
        numFormat.positiveFormat = "#.##############################" // # x 30
        return numFormat
    }()
}

1.0e-26 でもクリックできます

0.(25個の0)1 = 1.0e-26 つまり

0.00000000000000000000000001

の opacity を指定した Text もクリックすることができました。

0 ではクリックできません

もちろん、0 を指定するとクリックできません。

まとめ:Opacity 指定は、どれくらいまで クリックできるのか

Opacity 指定は、どれくらいまで クリックできるのか
  • opacity に 1.0e-26 を指定してもクリックできる
  • 厳密に、0 を指定するとクリックできない
  • 数値計算を使って、クリックできなくしたいならば、気をつける必要があるかも(誤差で、1.0e-26 とかありそうです)

説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です