Reputation: 18755
I need to allow two-finger pinch/rotate/panning and deny single-finger panning.
I've tried some ways to achieve this:
for (UIPanGestureRecognizer *pan in mapView.gestureRecognizers) {
if ([pan isKindOfClass:[UIPanGestureRecognizer class]]) {
if ([pan minimumNumberOfTouches] < 2) {
[pan setMinimumNumberOfTouches:2];
}
}
}
But this not works. Maybe some kind of UIGestureRecognizer
failing dependency?
Upvotes: 0
Views: 44
Reputation: 18755
Just found nice solution:
self.twoFingerPan = [[UIPanGestureRecognizer alloc] init];
self.twoFingerPan.maximumNumberOfTouches = 1;
self.twoFingerPan.delegate = self;
[self addGestureRecognizer:self.twoFingerPan];
...
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
if (gestureRecognizer == self.twoFingerPan &&
[otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] &&
(otherGestureRecognizer.view == self.mapView ||
otherGestureRecognizer.view.superview == self.mapView)) {
return YES;
}
return NO;
}
And addition to allow any outer scrolling:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
if (gestureRecognizer == self.twoFingerPan &&
[otherGestureRecognizer.view isKindOfClass:[UIScrollView class]]) {
return YES;
}
return NO;
}
Upvotes: 1