2012-03-02 17 views
6

Sto tentando di rimuovere tre riconoscitori di gesti collegati a una panoramica di scansione.come rimuovere completamente i riconoscitori di gesti

Ne elenco utilizzando

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

ho la tre elencati.

Allora io li rimuovere con:

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

Allora io li elenco di nuovo, e ottenere un conteggio pari a zero. Dovrebbero essere spariti/rimossi, giusto? Perché la visualizzazione continuerà a rispondere (e ai metodi gestuali vengono chiamati) agli stessi tocchi/passaggi. Esiste una sorta di meccanismo di "lavaggio" che deve accadere prima che se ne vadano per sempre?

questo è il modo in cui vengono creati:

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

grazie

+0

Hai impostato un punto di interruzione su quei metodi gestuali per verificare se sono stati effettivamente attivati ​​anche se hai rimosso il gesto? – Jeremy

+0

beh, i metodi che rispondono a loro vengono ancora chiamati. es. - (void) handleTouchesOne: (UITapGestureRecognizer *) recognizer) ... così roba continua a succedere sullo schermo. – TrekOnTV2017

+0

Interessante. Ho visto questo accadere nei casi in cui un gesto è trapelato in qualche modo. – Jeremy

risposta

1

Perché non si utilizza il delegato gesto di seguito per fermare qualsiasi gesto:

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

questo è il metodo in cui li sto rimuovendo. Ora penso che potrebbe essere il problema. Rimuovendoli nel mezzo di un metodo delegato. – TrekOnTV2017

+0

Perché devi rimuoverlo? Non riesci a restituire NO in questa funzione? – cocoakomali

+0

Credo che dovrò, dato che non sono in grado di rimuoverli correttamente. – TrekOnTV2017

0

Sembra a me come si Stai aggiungendo i rilevatori di gesti alla vista ma rimuovendoli da theScrollView. È questo ciò che intendevi? Dovresti rimuovere i riconoscimenti dei gesti da self.view se vuoi che si fermino.

+0

Ciao. Li rimuovo dalla stessa vista a cui sono collegati. Lo confermo controllando l'array gestureRecognizers prima e dopo la rimozione. È 3 prima e 0 dopo. – TrekOnTV2017

+0

Le schermate di scorrimento hanno sempre riconoscitori di gesti, ma la vista che stai aggiungendo non sembra essere quella da cui stai rimuovendo, in base al codice che hai pubblicato. Prova a farlo su self.view invece che su theScrollView e verifica se questo risolve il tuo problema. –

0

Adottare il protocollo UIGestureRecognizerDelegate e implementare il seguente metodo.

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