как я могу заставить onTapGesture работать, только если пользователь нажимает на круг не внутри всего фрейма Circle в SwiftUI? [дубликат]

Dec 05 2020

Я использую этот код для чтения касания пользователя на круге, проблема здесь в том, что он работает на всей части кадра 100X100, но я ожидаю, что он должен работать только на круге с цветным заполнением, как я могу решить эту проблему?

    struct ContentView: View {
    

    var body: some View {

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

Ответы

nicksarno Dec 06 2020 at 04:08

Хорошим маленьким приемом было бы добавить фоновый слой к кругу (он не может быть на 100% прозрачным, иначе он не будет отображаться, поэтому я сделал его непрозрачностью 0,0001, что выглядит четким), а затем добавить еще один TapGesture на этот слой. Новый жест будет иметь приоритет в фоновой области, и мы можем просто оставить его без действий, чтобы ничего не произошло.

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