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")
    }