停用手势识别

问题描述:

我有两种类型的识别器,一个水龙头,一个用于刷卡停用手势识别

UIGestureRecognizer *recognizer; 

//TAP 
recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(numTap1:)]; 
[(UITapGestureRecognizer *)recognizer setNumberOfTouchesRequired:1]; 
[self.view addGestureRecognizer:recognizer]; 
self.tapRecognizer = (UITapGestureRecognizer *)recognizer; 
recognizer.delegate = self; 
[recognizer release]; 

//SWIPE RIGHT 
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRight:)]; 
self.swipeRightRecognizer =(UISwipeGestureRecognizer *)recognizer; 
swipeRightRecognizer.direction = UISwipeGestureRecognizerDirectionRight; 
[self.view addGestureRecognizer:swipeRightRecognizer]; 
self.swipeRightRecognizer = (UISwipeGestureRecognizer *)recognizer; 
[recognizer release]; 

使用此功能,我可以对某些对象禁用水龙头。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 

if ((touch.view == loseView) || (touch.view == subBgView) || (touch.view == btnAgain)) { 

    return NO; 
} 

return YES; 
} 

如何禁用滑动?

非常感谢!

UIGestureRecognizer有一个属性名为enabled。这应该是足够好,禁用挥笔:

swipeGestureRecognizer.enabled = NO; 
+1

@PeyloW:+1我想我需要删除它并重新添加它的视图。 – Unheilig 2013-07-02 20:57:56

+2

此外,您可以在手势附加到的视图上设置userInteractionEnabled = NO。如果您正在使用某种叠加层,并且无论如何要禁用底层内容,这都很方便。这也会根据视图的隐藏和alpha值自动切换。 – ima747 2015-09-22 14:40:00

你为什么不设置滑动手势识别的代表也和相同的委托方法中处理它们。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    if ([gestureRecognizer isMemberOfClass:[UITapGestureRecognizer class]]) { 
     // Return NO for views that don't support Taps 
    } else if ([gestureRecognizer isMemberOfClass:[UISwipeGestureRecognizer class]]) { 
     // Return NO for views that don't support Swipes 
    } 

    return YES; 
} 

我有类似的问题。我的一些残疾用户同时轻按和滑动,以便应用移至下一个屏幕。我设置了一个选项,允许他们使用三指轻敲。我需要调用popoverControllerDidDismissPopover委托和应用第一次启动时的选项。所以我写了一个结合上述答案的方法。它会查找所有滑动手势识别器并将其关闭,然后打开我的手势识别器。

- (void)changeGestureRecognizer { 
    // Three finger tap to move to next screen 
    if ([Globals sharedInstance].useDoubleTapToMoveToNextScreen) { 

     // Let’s see which gestures are active and turn off the swipes 
     for (UIGestureRecognizer *gestureRecognizer in self.view.gestureRecognizers) { 
      NSLog(@"The gestureRecognizer is %@", gestureRecognizer); 
      if ([gestureRecognizer isMemberOfClass:[UISwipeGestureRecognizer class]]) gestureRecognizer.enabled = NO; 
     } 
     // Add the three finger tap 
     UITapGestureRecognizer *twoFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeNext)]; 
     [twoFingerTap setNumberOfTapsRequired:1]; 
     [twoFingerTap setNumberOfTouchesRequired:3]; 
     [self.view addGestureRecognizer:twoFingerTap]; 

    } 
}