2011-05-13 17 views
29

Tengo dos tipos de reconocedor, uno para el grifo y otro para deslizarDesactivar reconocedor gesto

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

con esta función que puedo desactivar grifos en algunos objetos.

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

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

    return NO; 
} 

return YES; 
} 

¿Cómo puedo desactivar los golpes?

¡Muchas gracias!

Respuesta

108

UIGestureRecognizer tiene una propiedad llamada enabled. Esto debe ser lo suficientemente bueno para desactivar sus golpes:

swipeGestureRecognizer.enabled = NO; 
+1

@PeyloW: +1 Pensé que tendría que quitarlo y volverlo a agregar a la vista. – Unheilig

+2

Además, puede establecer userInteractionEnabled = NO en la vista a la que está asociado el gesto. Esto es útil si está utilizando algún tipo de superposición que de todos modos quiera deshabilitar el contenido subyacente. Esto también se cambiará automáticamente en función de los valores ocultos y alfa de la vista. – ima747

16

¿Por qué no se establece el delegado para el reconocedor de golpe gesto también y manejarlos dentro del mismo método delegado.

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

Tengo un problema similar. Algunos de mis usuarios con discapacidad tocan y deslizan al mismo tiempo, por lo que la aplicación pasa a la siguiente pantalla. Configuré una opción para permitirles usar un toque de tres dedos en su lugar. Necesito invocar la opción del delegado popoverControllerDidDismissPopover y cuando la aplicación se inicia por primera vez. Entonces escribí un método que combina las respuestas anteriores. Busca todos los reconocedores de gestos de barrido y los apaga, luego enciende mi reconocedor de gestos de toque.

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

    } 
} 
Cuestiones relacionadas