2011-06-24 10 views
43

Tengo una vista y me aplicó una UIPanGestureRecogniser a este punto de vista:Pan Gesto Fin

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAnim:)]; 
[sliderView addGestureRecognizer:panGesture]; 
[panGesture release]; 

que puede detectar y procesar el gesto muy bien. Sin embargo, deseo iniciar otro método una vez que el gesto haya terminado.

Sé que hay dos métodos que permiten este tipo de detección. touchesEnded y touchesCancelled sin embargo, he encontrado que touchesCancelled se llama tan pronto como el toque se convierte en un gesto, es decir, muevo el dedo lo suficiente para garantizar una llamada de gesto y touchesEnded rara vez, si alguna vez se llama.

Quiero poder desplazarme hacia la izquierda/derecha y luego iniciar otra llamada a función al finalizar el gesto. ¿Cómo hago esto?

Respuesta

114

El evento final del gesto de pan se puede detectar al marcar su estado con UIGestureRecognizerStateEnded.

Consulte con el siguiente código.

-(void) panAnim:(UIPanGestureRecognizer*) gestureRecognizer 
{ 
    if(gestureRecognizer.state == UIGestureRecognizerStateEnded) 
    { 
     //All fingers are lifted. 
    } 
} 

De la documentación de Apple

Un gesto panorámica es continua. Es comienza (UIGestureRecognizerStateBegan) cuando el número mínimo de dedos permitido (minimumNumberOfTouches) tiene movido lo suficiente como para considerarse una bandeja. Cambia (UIGestureRecognizerStateChanged) cuando se mueve un dedo, mientras que al menos se presiona el número mínimo de dedos hacia abajo. Termina (UIGestureRecognizerStateEnded) cuando se levantan todos los dedos.

Read more

+0

Compañero de las aclamaciones! ¡Exactamente lo que necesitaba! –

+0

@Daniel Hanly: me alegra saber que te ayuda :) – Jhaliya

11

caso extremo gesto Pan puede ser detectado mediante la comprobación del estado de la UIGestureRecognizerStateEnded o con UIGestureRecognizerStateCancelled o UIGestureRecognizerStateFailed

Comprobar con el código de abajo.

-(void) panGesture:(UIPanGestureRecognizer*) gestureRecognizer 
    { 
    if(gestureRecognizer.state == UIGestureRecognizerStateEnded || gestureRecognizer.state == UIGestureRecognizerStateFailed || gestureRecognizer.state == UIGestureRecognizerStateCancelled) 
      { 
       //code what you want. 
      } 
    } 
5

Todas las respuestas son correctas, esta es solo una actualización para Swift.

Swift 3:

func panGesture(recognizer: UIPanGestureRecognizer) { 
    if recognizer.state == .ended { 
     // Do what you want 
    } 
}