ユーザーがSwiftUIのサークルのすべてのフレーム内ではなくサークルをタップした場合にのみonTapGestureを機能させるにはどうすればよいですか?[複製]

Dec 05 2020

サークルでユーザーのタップを読み取るためにこのダウンコードを使用しています。問題は、フレーム100X100のすべての部分で機能することですが、色で塗りつぶされたサークルでのみ機能するはずです。この問題を解決するにはどうすればよいですか?

    struct ContentView: View {
    

    var body: some View {

        
        Circle()
            .fill(Color.red)
            .frame(width: 100, height: 100, alignment: .center)
            .onTapGesture {
                print("tap")
            }
  
    }
}

回答

nicksarno Dec 06 2020 at 04:08

ちょっとしたハックは、円に背景レイヤーを追加して(100%クリアできないか、レンダリングされないので、不透明度0.0001にしました)、そのレイヤーに別のtapGestureを追加します。新しいジェスチャは背景領域で優先され、アクションなしでそのままにしておくことができるため、何も起こりません。

Circle()
    .fill(Color.red)
    .frame(width: 100, height: 100, alignment: .center)
    .background(
        Color.black.opacity(0.0001).onTapGesture { }
    )
    .onTapGesture {
        print("tap")
    }