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

时间:2016-05-20 02:08:20

标签: ios swift gesture

我的代码:

@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)

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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