首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在快速手势识别器开始时运行代码

如何在快速手势识别器开始时运行代码
EN

Stack Overflow用户
提问于 2020-01-20 04:22:59
回答 1查看 257关注 0票数 1

SwiftUI MagnificationGestureDragGesture都有.onChanged.onEnded API,但是无需检查手势何时开始,就像在UIKit中一样。我想有几种方法可以做到:

  • .$gestureStarted bool在onChanged中,然后在.onEnded
  • use中将其设置为false,这是一个带有tap.

的手势序列。

我是不是错过了做这件事的首选方法?想检查一下似乎是很自然的事。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-20 06:11:07

有特殊的@GestureState,可用于这一目的。所以,这里有一个可能的方法

代码语言:javascript
代码运行次数:0
运行
复制
struct TestGestureBegin: View {

    enum Progress {
        case inactive
        case started
        case changed
    }
    @GestureState private var gestureState: Progress = .inactive // initial & reset value

    var body: some View {
        VStack {
            Text("Drag over me!")
        }
        .frame(width: 200, height: 200)
        .background(Color.yellow)
        .gesture(DragGesture(minimumDistance: 0)
            .updating($gestureState, body: { (value, state, transaction) in
                switch state {
                    case .inactive:
                        state = .started
                        print("> started")
                    case .started:
                        state = .changed
                        print(">> just changed")
                    case .changed:
                        print(">>> changing")
                }
            })
            .onEnded { value in
                print("x ended")
            }
        )
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59816958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档