I have three different gestures with two different types on one view.
First is a UITapGestureRecognizer
and the two others are UILongPressGestureRecognizer
.
The long press gesture recognizer have different minimumPressDuration
, one is 0.15
and the other is 0.50
, so to I implemented he following function so that all the gestures are recognized:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer{
return true;
}
The function does allow all the gestures to be recognized but the problem is whenever a UILongPressGestureRecognizer
is recognized, a UITapGestureRecognizer
is also recognized.
So, I want to know how can I compare the types of gestureRecognizer in
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer
or how to stop the UITapGestureRecognizer
when UILongPressGestureRecognizer
is detected because UITapGestureRecognizer
is triggered whenever UILongPressGestureRecognizer
is triggered.
Instead of returning YES
to all cases in shouldRecognizeSimultaneouslyWithGestureRecognizer:
, if you don't want the gestures to be recognized simultaneously, you should actually return NO
:
- (BOOL) gestureRecognizer: (UIGestureRecognize *) gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer {
return NO;
}
But to accomplish what you're apparently trying to accomplish, I'd recommend using a different UIGestureRecognizerDelegate
method instead -- gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer:
-- so that you can specify which gesture is recognized before the other. In this case, since you'd like to stop the UITapGestureRecognizer
when a UILongPressGestureRecognizer
is detected, try this:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
// If the gesture recognizer is a UITapGestureRecongizer, but the other
// gesture detected is a UILongPressGestureRecognizer, require the
// UITapGestureRecognizer to fail.
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] &&
[otherGestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) {
return YES;
} else {
return NO;
}
}
Can check the class of the UIGestureRecognizer
For example:
-(BOOL) gestureRecognizer: (UIGestureRecognize *) gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer {
if ([gestureRecognizer isMemberOfClass: [UILongPressGestureRecognizer class]]) {
//do stuff
}
//etc
}