web-dev-qa-db-fra.com

Désactiver la reconnaissance de geste

J'ai deux types de reconnaissance, l'un pour le tap et l'autre pour le balayage

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

avec cette fonction je peux désactiver les taps sur certains objets.

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

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

    return NO;
}

return YES;
}

Comment puis-je désactiver les balayages?

Merci beaucoup!

34
Vins

UIGestureRecognizer a une propriété nommée enabled. Cela devrait suffire à désactiver vos balayages:

swipeGestureRecognizer.enabled = NO;
113
PeyloW

Pourquoi ne définissez-vous pas également le délégué pour la reconnaissance de mouvements par balayage et ne le gérez pas dans la même méthode de délégué?.

- (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;
}
17

J'ai un problème similaire. Certains de mes utilisateurs handicapés tapent et glissent en même temps pour que l'application passe à l'écran suivant. J'ai mis en place une option pour leur permettre d'utiliser un robinet à trois doigts à la place. J'ai besoin d'appeler l'option le délégué popoverControllerDidDismissPopover et au premier démarrage de l'application. J'ai donc écrit une méthode qui combine les réponses ci-dessus. Il recherche tous les dispositifs de reconnaissance de geste par balayage et les éteint, puis active mon dispositif de reconnaissance de geste.

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

    }
}
0
JScarry