我向视图添加了一个平移手势,在手指移动时移动视图,但我发现如果我没有调用Recognizer.setTranslation(CGPointZero,inView:self.view),则翻译不对。为什么?
@IBAction func handlePan(recognizer:UIPanGestureRecognizer) {
let translation = recognizer.translationInView(self.view)
recognizer.view!.center = CGPoint(x:recognizer.view!.center.x + translation.x,
y:recognizer.view!.center.y + translation.y)
recognizer.setTranslation(CGPointZero, inView: self.view)// this line must need, why?
...
}
答案 0 :(得分:26)
我不会说英语,但我认为这可能足以解释这一点。
UIPanGestureRecognizer中的转换代表从您开始拖动到当前手指位置的向量,尽管此向量的原点是{0,0}。所以你需要确定拖动的距离就是这个向量的另一个点。你可以致电:
来明白这一点recognizer.translationInView(self.view)
然后这一点帮助您设置视图的新位置。 但是UIPanGestureRecognizer确实是一个连续的"记者,她不会忘记上次报道后的状态。她不知道你已经用完了那部分翻译(重新定位你的观点),所以下次当'#34; handlePan"被称为,翻译不是从你手指的先前位置计算出来的,它是从原来的地方开始你的手指拖动!!
这就是你必须打电话的原因:
recognizer.setTranslation(CGPointZero,inView:self.view)
每次您使用该翻译来重新定位您的视图,就像您告诉识别器您将要开始一个新的拖动手势一样。