Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

如何使用 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 识别器将始终优先于圈子的优先级。