jak mogę sprawić, by onTapGesture działał tylko wtedy, gdy użytkownik dotknie okręgu nie wewnątrz całej ramki Circle w SwiftUI? [duplikować]
Dec 05 2020
Używam tego kodu w dół do czytania dotknięcia użytkownika w kółku, problem polega na tym, że działa on na wszystkich częściach ramy 100X100, ale spodziewam się, że powinien działać tylko na wypełnionym kolorem kółku, jak mogę rozwiązać ten problem?
struct ContentView: View {
var body: some View {
Circle()
.fill(Color.red)
.frame(width: 100, height: 100, alignment: .center)
.onTapGesture {
print("tap")
}
}
}
Odpowiedzi
nicksarno Dec 06 2020 at 04:08
Fajnym małym hackem byłoby dodanie warstwy tła do koła (nie może być w 100% przezroczysta lub nie renderuje się, więc zrobiłem krycie 0.0001, które wygląda na jasne), a następnie dodałem kolejny gest tapowania na tę warstwę. Nowy gest będzie miał priorytet w obszarze tła i możemy go po prostu pozostawić bez działania, aby nic się nie działo.
Circle()
.fill(Color.red)
.frame(width: 100, height: 100, alignment: .center)
.background(
Color.black.opacity(0.0001).onTapGesture { }
)
.onTapGesture {
print("tap")
}