highPriorityGesture() 强制一个手势先识别另一个手势?如果您在另一个视图中有一个 SwiftUI 视图,并且两个视图都具有相同的手势识别器,则系统将始终在父级之前在子级上触发识别器。 您可以使用 highPriorityGesture() 更改此行为,这将强制系统将一个手势优先于另一个手势。
例如,我们可以编写一些代码在 VStack 中放置一个圆圈,从而提供一个简单的轻击手势动作。 在这种情况下,圈子的手势动作将始终被触发:
struct ContentView: View {
var body: some View {
VStack {
Circle()
.fill(Color.red)
.frame(width: 200, height: 200)
.onTapGesture {
print("Circle tapped")
}
}
.onTapGesture {
print("VStack tapped")
}
}
}
如果要触发 VStack 手势代替圆的手势,则需要使用 highPriorityGesture() 替换 onTapGesture() 修饰符,如下所示:
struct ContentView: View {
var body: some View {
VStack {
Circle()
.fill(Color.red)
.frame(width: 200, height: 200)
.onTapGesture {
print("Circle tapped")
}
}
.highPriorityGesture(
TapGesture()
.onEnded { _ in
print("VStack tapped")
}
)
}
}
使用此替代方法时,将始终打印 VStack tapped,因为 VStack 识别器将始终优先于圈子的优先级。