2012-03-02 7 views
6

Estoy tratando de eliminar tres reconocedores de gestos adjuntos a una uiscrollview.cómo eliminar por completo los reconocedores de gestos

I Lista ellos utilizando

NSArray * activeScrollViewGRecs = [theScrollView gestureRecognizers]; 
NSLog (@"activeScrollViewGRecs count: %d",[activeScrollViewGRecs count]); 

consigo los tres enumerados.

Entonces les quite con:

for (UIGestureRecognizer *recognizer in activeScrollViewGRecs) 
{ 
    NSLog (@"recognizer: %@",recognizer.description); 
    recognizer.enabled = NO; 
    [theScrollView removeGestureRecognizer:recognizer]; 
} 

Entonces les lista de nuevo, y obtener un recuento de cero. Deben desaparecer/eliminarse, ¿no? ¿Por qué la vista continuaría respondiendo (y los métodos de gestos se llamarán) a los mismos toques/toques. ¿Hay algún tipo de mecanismo de "enrojecimiento" que deba suceder antes de que se vayan para siempre?

esta es la forma en que se crean:

tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handle1:)]; 
tapGesture.cancelsTouchesInView = NO; tapGesture.delaysTouchesEnded = NO; 
tapGesture.numberOfTouchesRequired = 2; tapGesture.numberOfTapsRequired = 2;  
[self.view addGestureRecognizer:tapGesture]; [tapGesture release]; 

swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handle2:)]; 
swipeGesture.cancelsTouchesInView = NO; swipeGesture.delaysTouchesEnded = NO; swipeGesture.delegate = self; 
swipeGesture.direction = UISwipeGestureRecognizerDirectionLeft; 
[self.view addGestureRecognizer:swipeGesture]; [swipeGesture release]; 

gracias

+0

¿Ha establecido un punto de interrupción en esos métodos de gesto para verificar si realmente se están disparando aunque haya eliminado el gesto? – Jeremy

+0

bien, los métodos que responden a ellos todavía reciben llamadas. es decir, (void) handleTouchesOne: (UITapGestureRecognizer *) reconocedor) ... así que las cosas todavía están sucediendo en la pantalla. – TrekOnTV2017

+0

Interesante. He visto esto suceder en casos donde un gesto se filtró de alguna manera. – Jeremy

Respuesta

1

¿Por qué no utilizar el delegado gesto de abajo para detener cualquier gesto:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch; 
+0

este es el método en el que los estoy eliminando. Ahora creo que ese podría ser EL problema. Quitándolos en medio de un método delegado. – TrekOnTV2017

+0

¿Por qué necesita eliminarlo? ¿No puedes devolver NO en esta función? – cocoakomali

+0

Supongo que tendré que hacerlo, ya que no puedo eliminarlos correctamente. – TrekOnTV2017

0

Me parece que se Agregue los reconocedores de gestos a la vista pero eliminándolos de la Vista de desplazamiento. ¿Es esto lo que pretendías? Debería eliminar los reconocedores de gestos de self.view si desea que se detengan.

+0

Hola. Los elimino de la misma vista a la que están conectados. Confirmo esto al verificar la matriz gestureRecognizers antes y después de la eliminación. Son 3 antes y 0 después. – TrekOnTV2017

+0

Scrollviews siempre tiene reconocedores de gestos, pero la vista a la que está agregando no parece ser la que está eliminando, de acuerdo con el código que ha publicado. Intenta hacerlo en self.view en lugar de en ScrollView y mira si eso soluciona tu problema. –

0

Adopte el protocolo UIGestureRecognizerDelegate e implemente el siguiente método.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
    if (to completely remove gesture recognizers) 
     return NO; 
    else 
     return YES; 
} 
Cuestiones relacionadas