UIPanGestureRecognizer Swift Capture相对翻译



我需要捕获相对平移,我只处理x方向的

假设我在一个方向上从右向左滑动(例如:-13.XXX到-68.XXX(,然后不抬起手指,我从左向右滑动(例如,-68.XXX到+30.XXX(我该如何捕捉特定点的翻译发生了变化我试图使用速度,在开始和方向改变时,速度最终为0。

我建议根据速度计算方向:

enum Direction {
case left
case right
}
extension Direction {
static func direction(from velocity: CGFloat) -> Direction? {
if velocity < 0 {
return .left
} else if velocity > 0 {
return .right
} else {
return nil
}
}
}

然后,跟踪上一个方向并检测方向的变化:

var previousDirection: Direction?
@objc func handlePan(_ gesture: UIPanGestureRecognizer) {
let velocity = gesture.velocity(in: gesture.view).x
guard let direction = Direction.direction(from: velocity) else { return }
if direction != previousDirection {
if previousDirection == nil {
print("starting", direction)
} else {
print("changing direction to", direction)
}
previousDirection = direction
}
}

请注意,您不能依赖零速度的测试,因为当您从左平移到右平移(反之亦然(时,它可能会从一个方向转到另一个方向,而不会遇到精确为零的速度。你可能偶尔会这样做,但不是一般性的。

最新更新