Ios 平移手势:为什么需要将平移设置为零?

Ios 平移手势:为什么需要将平移设置为零?,ios,gesture,Ios,Gesture,我在视图中添加了平移手势,在手指移动时移动视图,但我发现如果我不调用recognizer.setTranslation(CGPointZero,inView:self.view),则平移不正确。为什么? @IBAction func handlePan(recognizer:UIPanGestureRecognizer) { let translation = recognizer.translationInView(self.view) recognizer.view!.

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

我英语说得不好,但我想这足以解释这一点

UIPanGestureRecognizer中的平移表示从开始拖动到当前手指位置的向量,尽管该向量的原点是{0,0}。所以你只需要确定你拖动的距离就是这个向量的另一个点。您可以通过以下方式了解这一点:

识别器.translationView(self.view)

然后,这一点帮助您设置视图的新位置。 但UIPangestureRecognitor确实是一名“连续”记者,她不会忘记上次报道后的状态。她不知道你已经用光了那部分翻译(重新定位你的视图),所以下次调用“handlePan”时,翻译不是从你手指的上一个位置计算出来的,而是从你手指开始拖动的原始位置计算出来的

这就是为什么你必须打电话:

识别器.setTranslation(CGPointZero,inView:self.view)

每次使用该转换来重新定位视图时,就像告诉识别器要开始新的拖动手势一样