2013-04-08 17 views
5

Dalla lettura di UIGestureRecognizer Class Reference è implicito che l'API gestirà la priorità di tocchi e controlli gestuali per te, assicurandosi che il tuo touchesBegan e metodi correlati non vengano richiamati nella vista a meno i riconoscitori dei gesti non sono riusciti prima:Come assegnare priorità ai riconoscitori di gesti e ai tocchi in un UIView

Una finestra consegna gli eventi di tocco a un rilevatore di gesti prima di consegnarli alla vista sottoposta a test hit collegata al riconoscimento di gesture. Generalmente, se un riconoscitore di gesti analizza il flusso di tocchi in una sequenza multi-touch e non riconosce il suo gesto, la vista riceve il pieno complemento di tocchi. Se un riconoscitore di gesti riconosce il suo gesto, i restanti tocchi per la vista vengono annullati.

Ho aggiunto un gesto di scorrimento alla mia vista e funziona. Tramite alcune registrazioni, quando eseguo un singolo passaggio, il metodo riporta come tale. Tuttavia, il mio metodo è anche segnalazione tramite il relativo registro, nonostante che il metodo touchesCancelled sia, come previsto, anche ricevendo un messaggio.

Voglio e mi aspetto che il gesto riconosca per impedire touchesBegan o touchesMoved di essere chiamato.

Quindi la mia domanda è: per il riconoscitore di gesti infatti ritarda i tocchi in base al suo stato, è necessaria una configurazione aggiuntiva? I documenti non suggeriscono nient'altro se necessario.

La mia configurazione è semplice:

swipeUpTwoFinger=[[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(doubleSwipeUp:)]autorelease]; 
swipeUpTwoFinger.direction=UISwipeGestureRecognizerDirectionUp; 
swipeUpTwoFinger.numberOfTouchesRequired=2; 
[self addGestureRecognizer:swipeUpTwoFinger]; 

Ho anche provato questo test per assicurarsi che un sistema di riconoscimento non è riuscito prima della trasformazione con touchesBegan (questo test dovrebbe non essere necessaria se si crede ciò che i documenti dicono sopra), ma la touchesBegan sta ancora elaborando la linea di log dopo questo test:

if (swipeUpTwoFinger.state==UIGestureRecognizerStateFailed)

risposta

7

suona come è necessario: swipeUpTwoFinger.delaysTouchesBegan = YES;

+0

infatti ho appena scoperto che non è abilitato di default. Grazie. – johnbakers

Problemi correlati