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

Fat*_*dle 0 gesture ios swift

我的代码:

@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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

然后我在模拟器上再次运行该项目,当我单击该按钮并尝试移动一点时,该按钮只是朝同一方向飞行并消失在屏幕外,为什么?

rma*_*ddy 5

当您平移时,transition值来自您首次开始手势的位置。

看看你如何移动按钮。您只需不断向transition每个更新的center. 您需要做的是将最新的内容添加transitioncenter首次识别平移手势时的状态。

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