SwiftUI 如何使用 highPriorityGesture() 强制一个手势先识别另一个手势?

13 min read

在 SwiftUI 中,我们可以使用 highPriorityGesture() 方法来为一个视图添加一个高优先级的手势,以强制其在其他手势之前被识别。

示例代码:

struct ContentView: View {
    @State private var isTapped = false
    var body: some View {
        VStack {
            Circle()
                .fill(isTapped ? Color.red : Color.blue)
                .frame(width: 100, height: 100)
                .highPriorityGesture(TapGesture()
                    .onEnded { _ in
                        self.isTapped.toggle()
                    }
                )
                .gesture(DragGesture()
                    .onChanged { _ in
                        self.isTapped = false
                    }
                )
        }
    }
}

在这个示例中,我们创建了一个 Circle 视图,并为其添加了一个可拖拽的手势和一个可单击的手势,并使用 highPriorityGesture() 方法将单击手势设置为高优先级。这样,无论用户首先执行的是哪一个手势,都会先识别单击手势,并执行单击手势的操作。

请注意,当手势之间存在冲突时,系统会优先识别高优先级的手势。因此,在使用 highPriorityGesture() 方法时,我们需要特别小心,确保我们的手势不会与其他手势冲突,并且确保我们的应用程序的用户体验不会因此变得混乱。