没有 setTranslation 奇怪行为的平移手势

A pan gesture without setTranslation strange behaviour

我的代码:

@IBAction func handlePan(gesture: UIPanGestureRecognizer) {
    let transition = gesture.translationInView(self.view)
    switch gesture.state{
    case .Changed:
        if let view = gesture.view {
            view.center = CGPoint(x: view.center.x + transition.x, y: view.center.y + transition.y)
        }
        gesture.setTranslation(CGPointZero, inView: self.view)

    default:break
    }
}

所以我可以在屏幕上四处拖动一个大按钮。在我注释掉 gesture.setTranslation(CGPointZero, inView: self.view).

之前一切正常

我以为一行代码只告诉应用程序记住按钮在屏幕上的最后位置并下次从那里移动,但是...

然后我又在模拟器上运行这个项目,当我点击那个按钮并试图移动一点时,按钮只是朝同一个方向飞去并消失在屏幕上,为什么?

当你四处平移时,transition 值是从你第一次开始手势的地方开始的。

看看你是怎么移动按钮的。您只需将越来越大的 transition 添加到每个更新的 center。您需要做的是将最新的 transition 添加到 center 中,就像第一次识别平移手势时一样。

因此,要么重置翻译(就像在您发布的代码中一样),要么在手势状态为 .Began 时保存按钮的原始 center 并将翻译应用于原始中心值。