ユーザーが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")
}