如何检测 EdgePan Gesture SwiftUI

nOk*_*nOk 5 gesture swift swiftui

我试图从 SwiftUI 的左侧识别 EdgePan。我知道有一些手势,但无法将它们应用于整个屏幕。(尝试使用 DragGesture)。是否可以在 SwiftUI 中实现 EdgePan?或者我如何使用 DragGesture 来做同样的事情?

Wil*_*ill 8

是的,这可以通过DragGesture.

DragGesture有一个startLocation属性,它是CGPoint. 由此,您可以检测手势的开始位置,并使用它可以确定它是否从边缘开始。

获取现有的DragGesture,并在.onChanged闭包中传入gesture,并使用 找到起始位置gesture.startLocation。因为要检测的边缘,你会想的x财产gesture.startLocation

它看起来像这样:

DragGesture()
    .onChanged({gesture in
        if gesture.startLocation.x < CGFloat(100.0){
            print("edge pan")
        }
     }
)
Run Code Online (Sandbox Code Playgroud)

  • 效果很好,唯一的问题是它没有考虑方向本身。假设您位于左侧边缘并向上滑动,这会将其视为边缘平移,但我们想要水平移动。我将打印包裹在这段代码中,以确保角度为 +45* 或 -45*,这对我来说足够接近水平...让斜率 = abs((gesture.startLocation.y -gesture.location.y) /(gesture.startLocation.x -gesture.location.x)) 如果坡度 &lt; 1 { print("边缘平移") } (2认同)