我向视图添加了一个平移手势,在手指移动时移动视图,但我发现如果我不调用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?
...
}
Run Code Online (Sandbox Code Playgroud)
Guo*_*Pan 32
我不会说英语,但我认为这可能足以解释这一点.
UIPanGestureRecognizer中的转换代表从您开始拖动到当前手指位置的向量,尽管此向量的原点是{0,0}.所以你需要确定拖动的距离就是这个向量的另一个点.你可以通过以下方式获得这一点
recognizer.translationInView(self.view)
然后,这一点帮助您设置视图的新位置.但UIPanGestureRecognizer确实是一位"连续"的记者,她不会忘记上次报道后的状态.她不知道你已经用完了那部分翻译(重新定位你的视图),所以下次调用"handlePan"时,翻译不会从你手指的先前位置计算出来,而是来自开始你的手指拖动的原始地方!
这就是你必须打电话的原因:
recognizer.setTranslation(CGPointZero,inView:self.view)
每当您使用该翻译重新定位视图时,就像您告诉识别器您将要开始新的拖动手势一样.