SwiftUI 如何在视图中添加手势识别器?

18 min read

在 SwiftUI 中,可以使用手势识别器对视图进行交互。可以通过以下步骤在视图中添加手势识别器:

  1. 导入 GestureGestureState 包:

    import SwiftUI
    import Combine
    
  2. 添加手势识别器属性到视图:

    @GestureState private var scale: CGFloat = 1.0
    

    在这个例子中,我们添加了一个名为 scale 的手势识别器属性,它的值为当前视图的缩放比例。

  3. 在视图体中使用手势识别器:

    .scaleEffect(scale)
    .gesture(
        MagnificationGesture()
            .updating($scale) { value, scale, transaction in
                scale = value.magnitude
            }
    )
    

    在这个例子中,我们使用放大手势 (MagnificationGesture()) 来触发视图的缩放。使用 .updating($scale) 修饰符将手势变化的值 (value) 赋值给 scale 属性。这样,当手势识别器被触发时,视图就会以手势的缩放比例进行缩放。

  4. 完整示例:

    struct ContentView: View {
        @GestureState private var scale: CGFloat = 1.0
    
        var body: some View {
            Text("Hello, World!")
                .font(.largeTitle)
                .scaleEffect(scale)
                .gesture(
                    MagnificationGesture()
                        .updating($scale) { value, scale, transaction in
                            scale = value.magnitude
                        }
                )
        }
    }
    

    这是一个简单的示例,它将 Hello, World! 文本视图缩放到手势的大小。在这个例子中,我们使用了放大手势,但还有很多其他类型的手势可以使用,例如拖动手势 (DragGesture) 和长按手势 (LongPressGesture)。可以根据需要使用这些手势来增强应用程序的交互性。