I have UICollectionView
and decided to override gestureRecognizerShouldBegin
function to be able to control the number of touches involved in collection scrolling.
So I want my UICollectionView
to scroll with only one finger.
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
switch gestureRecognizer == self.panGestureRecognizer {
case true:
return gestureRecognizer.numberOfTouches == 1
default:
return super.gestureRecognizerShouldBegin(gestureRecognizer)
}
}
It works as expected on my iOS 10.3.1 device. But it doesn't on iOS 10.0.1, iOS 9.3.5.
The problem is that UICollectionView
's UIPanGestureRecognizer
might return zero touches when gestureRecognizerShouldBegin
fires. So, if someone wants to control the number of touches allowed for UICollectionView
scrolling the way I described above, he should be aware of the problem... or choose some other approach.
The way it works correctly (almost):
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
switch gestureRecognizer == self.panGestureRecognizer {
case true:
return gestureRecognizer.numberOfTouches <= 1
default:
return super.gestureRecognizerShouldBegin(gestureRecognizer)
}
}