как я могу заставить 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")
}