Swift - 如何检测滑动手势距离放弃?

时间:2016-10-01 08:22:21

标签: ios swift uiswipegesturerecognizer swipe-gesture

Instagram如何在向后滑动时处理滑动手势距离(弹出导航过程)。例如,如果不是长距离,则可以放弃向后滑动,然后再次返回旧视图。

我想知道这个,如果有人解释那会很棒。

3 个答案:

答案 0 :(得分:0)

手势识别器本身没有检测到距离。

相反,您将使用手势识别器移动视图,然后,当手势结束时,确定视图是否已超出某一点,并采取相应的行动。

因此,在一个简单的例子中,您可以测试视图是否移动了超过屏幕的一半:
如果是这样,您继续移动它并且segue到另一个视图;如果没有,你设置一个动画,将视图带回到它的起点。

希望有所帮助。

您可能需要查看:
https://www.raywenderlich.com/62435/make-swipeable-table-view-cell-actions-without-going-nuts-scroll-views更深入地解释了这种方法。

答案 1 :(得分:0)

使用UIGestureRecognizer绝对没问题。您可能需要查看Apple文档:https://developer.apple.com/reference/uikit/uigesturerecognizer/1619996-touchesmoved 此方法返回UITouch,再次从Apple文档中,您可以看到此UITouch表示手指在屏幕上针对特定事件的位置,大小,移动和力。

答案 2 :(得分:0)

我正在使用此函数计算两点之间的距离:

//Distance
extension CGPoint {
    func distanceCount(_ point: CGPoint) -> CGFloat {
        return abs(CGFloat(hypotf(Float(point.x - x), Float(point.y - y))))
    }
}

用法:

let myDistance = p1.distanceCount(p2) //p1 is firstTouch and p2 is when user stops touching.

然后你可以做类似

的事情
    if distance < SomeValue {
   //Some code
 }

希望它会对你有所帮助。