Comment puis-je faire en sorte que onTapGesture fonctionne uniquement si l'utilisateur appuie sur un cercle qui ne se trouve pas dans tous les cadres de Circle dans SwiftUI? [dupliquer]

Dec 05 2020

J'utilise ce code bas pour lire le robinet de l'utilisateur sur Circle, le problème est ici qu'il fonctionne sur toutes les parties du cadre 100X100 mais je m'attends à ce qu'il ne fonctionne que sur Circle rempli de couleur, comment puis-je résoudre ce problème?

    struct ContentView: View {
    

    var body: some View {

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

Réponses

nicksarno Dec 06 2020 at 04:08

Un petit truc sympa serait d'ajouter un calque d'arrière-plan au cercle (il ne peut pas être clair à 100% ou il ne serait pas rendu, donc je l'ai rendu opaque 0,0001 qui semble clair), puis ajoutez un autre tapGesture sur ce calque. Le nouveau geste aura la priorité dans la zone d'arrière-plan et nous pouvons simplement le laisser sans action pour que rien ne se passe.

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