Disable gesture recognizer

51,056

Solution 1

UIGestureRecognizer has a property named enabled. This should be good enough to disable your swipes:

swipeGestureRecognizer.enabled = NO;

Edit: For Swift 5

swipeGestureRecognizer.isEnabled = false

Solution 2

Why don't you set the delegate for the swipe gesture recognizer too and handle them within the same delegate method.

- (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;
}
Share:
51,056
Vins
Author by

Vins

Updated on July 09, 2022

Comments

  • Vins
    Vins over 1 year

    I have two types of recognizer, one for tap and one for swipe

    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];
    

    with this function I can disable taps on some objects.

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    
    if ((touch.view == loseView) || (touch.view == subBgView) || (touch.view == btnAgain)) {
    
        return NO;
    }
    
    return YES;
    }
    

    How can I disable swipes?

    Thanks a lot!

  • Unheilig
    Unheilig over 10 years
    @PeyloW: +1 I thought I would need to remove it and re-add it on the view.
  • ima747
    ima747 about 8 years
    Additionally you can set userInteractionEnabled = NO on the view that the gesture is attached to. This is handy if you're using some sort of overlay that you're going to want to disable the underlying content anyway. This will also automatically get toggled based on hidden and alpha values for the view.