Wie kann ich onTapGesture nur dann zum Laufen bringen, wenn der Benutzer in SwiftUI auf den Kreis tippt, der nicht innerhalb des gesamten Rahmens des Kreises liegt? [Duplikat]
Dec 05 2020
Ich verwende diesen Abwärtscode zum Lesen des Tippens eines Benutzers auf Circle. Das Problem besteht darin, dass er auf allen Teilen des Frames 100X100 funktioniert. Ich gehe jedoch davon aus, dass er nur auf farbgefüllten Circle funktioniert. Wie kann ich dieses Problem lösen?
struct ContentView: View {
var body: some View {
Circle()
.fill(Color.red)
.frame(width: 100, height: 100, alignment: .center)
.onTapGesture {
print("tap")
}
}
}
Antworten
nicksarno Dec 06 2020 at 04:08
Ein netter kleiner Hack wäre, dem Kreis eine Hintergrundebene hinzuzufügen (es kann nicht 100% klar sein oder es würde nicht gerendert werden, also habe ich die Deckkraft 0,0001 gemacht, was klar aussieht) und dann eine weitere TapGesture auf diese Ebene hinzuzufügen. Die neue Geste hat im Hintergrundbereich Vorrang und wir können sie einfach ohne Aktion belassen, damit nichts passiert.
Circle()
.fill(Color.red)
.frame(width: 100, height: 100, alignment: .center)
.background(
Color.black.opacity(0.0001).onTapGesture { }
)
.onTapGesture {
print("tap")
}