潘手势:为什么需要setTranslation为零?

时间:2015-04-10 10:03:16

标签: ios gesture

我向视图添加了一个平移手势,在手指移动时移动视图,但我发现如果我没有调用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?
...
}

1 个答案:

答案 0 :(得分:26)

我不会说英语,但我认为这可能足以解释这一点。

UIPanGestureRecognizer中的转换代表从您开始拖动到当前手指位置的向量,尽管此向量的原点是{0,0}。所以你需要确定拖动的距离就是这个向量的另一个点。你可以致电:

来明白这一点

recognizer.translationInView(self.view)

然后这一点帮助您设置视图的新位置。 但是UIPanGestureRecognizer确实是一个连续的"记者,她不会忘记上次报道后的状态。她不知道你已经用完了那部分翻译(重新定位你的观点),所以下次当'#34; handlePan"被称为,翻译不是从你手指的先前位置计算出来的,它是从原来的地方开始你的手指拖动!!

这就是你必须打电话的原因:

recognizer.setTranslation(CGPointZero,inView:self.view)

每次您使用该翻译来重新定位您的视图,就像您告诉识别器您将要开始一个新的拖动手势一样。