如何比较 iOS 上的手势类型?

mad*_*per 4 objective-c uigesturerecognizer ios uitapgesturerecognizer ios8

我在一个视图中有两种不同类型的三种不同手势。

第一个是 a UITapGestureRecognizer,另外两个是UILongPressGestureRecognizer

长按手势识别器有不同的minimumPressDuration,一个是0.15,另一个是0.50,所以我实现了以下功能,以便识别所有手势:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer{
    return true;
}
Run Code Online (Sandbox Code Playgroud)

该功能确实允许识别所有手势,但问题是每当UILongPressGestureRecognizer识别出 a 时UITapGestureRecognizer,也识别出 a。

所以,我想知道如何比较中的gestureRecognizer的类型

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer
Run Code Online (Sandbox Code Playgroud)

或如何停止UITapGestureRecognizer的时候UILongPressGestureRecognizer检测,因为UITapGestureRecognizer每当触发UILongPressGestureRecognizer被触发。

Lyn*_*ott 5

与其返回YES中的所有情况shouldRecognizeSimultaneouslyWithGestureRecognizer:,如果您不想同时识别手势,您实际上应该返回NO

- (BOOL) gestureRecognizer: (UIGestureRecognize *) gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *) otherGestureRecognizer {
   return NO;
}
Run Code Online (Sandbox Code Playgroud)

但是为了完成您显然想要完成的任务,我建议您改用不同的UIGestureRecognizerDelegate方法 -- gestureRecognizer:shouldBeRequiredToFailByGestureRecognizer:-- 这样您就可以指定哪个手势在另一个手势之前被识别。在这种情况下,由于您想UITapGestureRecognizerUILongPressGestureRecognizer检测到a 时停止,请尝试以下操作:

- (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;
    }
}
Run Code Online (Sandbox Code Playgroud)