2011-12-06 9 views
10

¿Cómo puedo saber cuándo el dedo está hacia abajo y cuándo está arriba con UITapGestureRecognizer?
El documentation dice que solo debo manejar UIGestureRecognizerStateEnded como toque, así que significa que hay UIGestureRecognizerStateBegin cuando el dedo está hacia abajo, pero todo lo que obtengo es UIGestureRecognizerStateEnded.
El código que utilizo para registrar el reconocedor es:detectando dedo arriba/abajo UITapGestureRecognizer

[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)] 
+0

Si tiene el mismo problema echa un vistazo a este enlace, es una belleza: [guides.codepath.com] (https://guides.codepath.com/ios/Using-Gesture-Recognizers#programmatically-add -y-configure-a-gestor-reconocedor) – MoVod

Respuesta

18

UITapGestureRecognizer es un reconocedor gesto discreto, y por lo tanto nunca transiciones a los estados comenzaron o modificados. Desde el UIGestureRecognizer Referencia de las clases:

gestos discretos transición de Posible bien están reconocidos (UIGestureRecognizerStateRecognized) o Failed (UIGestureRecognizerStateFailed), dependiendo de si se interpretan con éxito el gesto o no. Si el reconocedor de gestos pasa a Reconocido, envía su mensaje de acción a su destino.

(Recordando por supuesto que UIGestureRecognizerStateRecognized == UIGestureRecognizerStateEnded).

Los documentos dicen que debe verificar el estado de un reconocedor de gestos de toque para ver que está en su estado finalizado, antes de disparar su código para decir que ha sido reconocido. No están diciendo que el gesto de tocar realmente transiciones a los estados de inicio o cambio (¡aunque admito que los documentos son un poco engañosos en el lenguaje utilizado!).

Si desea comprobar el evento de tocar con el dedo para un reconocedor de gesto de toque, le recomendaría simplemente usar touchesBegan:withEvent:, ya que esto es lo que realmente desea después de todos modos.

1

Puede anular el método delegado -(BOOL)gestureRecognizer:shouldReceiveTouch:.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    NSLog(@"Hello from press down"); 

    return YES; 
} 
Cuestiones relacionadas