我的代码:
@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)
。
我认为一行代码只会告诉应用程序记住屏幕上按钮的最后位置,然后从那里移动,但是......
然后我在模拟器上再次运行项目,当我点击那个按钮并尝试移动一下时,按钮只是朝着同一方向飞行并消失在屏幕外,为什么?
答案 0 :(得分:2)
当你平移时,transition
值就是你第一次开始手势的地方。
看看你如何移动按钮。您只需向每个更新的transition
添加越来越大的center
。您需要做的是将最新的transition
添加到center
,就像首次识别平移手势时一样。
因此,要么重置翻译(例如在发布的代码中),要么在手势状态为center
时保存按钮的原始.Began
,并将翻译应用于原始中心值。