bagaimana cara membuat onTapGesture berfungsi hanya jika pengguna mengetuk lingkaran bukan di dalam semua bingkai Circle di SwiftUI? [duplikat]

Dec 05 2020

Saya menggunakan kode bawah ini untuk membaca tap pengguna di Circle, masalahnya di sini bahwa ini berfungsi pada semua bagian frame 100X100 tetapi saya berharap itu hanya berfungsi pada Circle yang diisi warna, bagaimana saya bisa menyelesaikan masalah ini?

    struct ContentView: View {
    

    var body: some View {

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

Jawaban

nicksarno Dec 06 2020 at 04:08

Peretasan kecil yang bagus adalah menambahkan lapisan latar belakang ke lingkaran (tidak bisa 100% jelas atau tidak akan dirender, jadi saya membuatnya opacity 0.0001 yang terlihat jelas) dan kemudian menambahkan tapGesture lain ke lapisan itu. Isyarat baru akan diprioritaskan di area latar belakang dan kita bisa membiarkannya tanpa tindakan jadi tidak ada yang terjadi.

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