41 votes

Désactiver le dispositif de reconnaissance de gestes

J'ai deux types de reconnaisseurs, un pour TAP et un pour 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];

avec cette fonction, je peux désactiver les tapotements 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 !

124voto

PeyloW Points 25312

UIGestureRecognizer a une propriété nommée enabled. Cela devrait être suffisant pour désactiver vos balayages :

swipeGestureRecognizer.enabled = NO;

Modifier : Pour SWIFT 5

swipeGestureRecognizer.isEnabled = false

17voto

Deepak Danduprolu Points 33605

Pourquoi ne pas également définir le délégué pour le dispositif de reconnaissance de gestes de balayage et le manipuler 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;
}

0voto

JScarry Points 479

J'ai un problème similaire. Certains de mes utilisateurs désactivés effleurent et balayent en même temps, de sorte 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'invoquer l'option popoverControllerDidDismissPopover delegate et quand l'application démarre pour la première fois. J'ai donc écrit une méthode qui combine les réponses ci-dessus. Il recherche tous les identificateurs de gestes de balayage et les éteint, puis allume mon identificateur de gestes de robinet.

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

    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X