以下是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
;为什么我们关心其余的接触?
我错过了什么吗?
答案 0 :(得分:0)
我不认为你错过任何东西。我同意你的观点。
出于兴趣,现有的UIGestureRecognizer
子类未涵盖哪些自定义行为?