为什么我们需要检查自定义手势识别器是否仍然在touchesBegin中追踪UITouch对象(_:with :)

时间:2017-09-21 06:42:29

标签: ios uiview uigesturerecognizer uitouch

以下是Section" Processing Touch Events"的清单3的副本。名为Implementing a Continuous Gesture Recognizers

的文档页面
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {
   if touches.count != 1 {
      self.state = .failed
   } 

   // Capture the first touch and store some information about it.
   if self.trackedTouch == nil {           // <-- Q: Should it not be nil anyway?
      if let firstTouch = touches.first {
         self.trackedTouch = firstTouch
         self.addSample(for: firstTouch)
         state = .began
      }
   } else {
      // Ignore all but the first touch.
      for touch in touches {               // <-- Q: We have already set the
         if touch != self.trackedTouch {   // <-- state to .failed, why do
            self.ignore(touch, for: event) // <-- we care about the other
         }                                 // <-- touches?
      }
   }
}

在此,我不明白为什么我们需要检查self.trackedTouch是否为nil。据我所知,每次我们将手势识别器状态设置为.recognized时,UIKit都必须调用reset()。

此外,在else子句中,它忽略除第一个之外的所有触摸。但是,在函数体的顶部,无论如何我们将状态设置为.failed;为什么我们关心其余的接触?

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

我不认为你错过任何东西。我同意你的观点。

出于兴趣,现有的UIGestureRecognizer子类未涵盖哪些自定义行为?