2012-10-24 17 views

risposta

29

ACB ha citato il riferimento UIGestureRecognizer. Per rendere un po 'più concreto, si supponga di avere una vista con un sistema di riconoscimento gesto pan attaccato, e si dispone di questi metodi nel controller della vista:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesBegan"); 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesMoved"); 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesEnded"); 
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesCancelled"); 
} 

- (IBAction)panGestureRecognizerDidUpdate:(UIPanGestureRecognizer *)sender { 
    NSLog(@"panGesture"); 
} 

E naturalmente il gesto riconoscitore padella è configurato per inviare il panGestureRecognizerDidUpdate: Messaggio.

Ora supponiamo di toccare la vista, muovere il dito abbastanza da riconoscere il gesto panoramica, quindi sollevare il dito. Cosa stampa l'app?

Se il sistema di riconoscimento gesto ha cancelsTouchesInView insieme a YES, l'applicazione registrerà questi messaggi:

touchesBegan 
touchesMoved 
touchesCancelled 
panGesture 
panGesture 
(etc.) 

Si potrebbe ottenere più di un touchesMoved prima della cancellazione.

Quindi, se si imposta cancelsTouchesInView su YES (impostazione predefinita), il sistema annullerà il tocco prima di inviare il primo messaggio dal rilevatore di gesti e non sarà possibile ricevere altri messaggi relativi al tocco per quel tocco.

Se il sistema di riconoscimento gesto ha cancelsTouchesInView insieme a NO, l'applicazione registrerà questi messaggi:

touchesBegan 
touchesMoved 
panGesture 
touchesMoved 
panGesture 
touchesMoved 
panGesture 
(etc.) 
panGesture 
touchesEnded 

Quindi, se si imposta cancelsTouchesInView-NO, il sistema continua l'invio di messaggi al tocco a favore dei gesto touch, interlacciato con i messaggi del riconoscitore di gesti. Il tocco termina normalmente invece di essere annullato (a meno che il sistema non annulli il tocco per qualche altro motivo, come il tasto home premuto durante il tocco).

+0

Grazie! Quando si imposta cancelsTouchesInView su No, l'evento verrà annullato scoppiando a destra? – jebberwocky

+1

Non capisco cosa significhi "cancellare scoppiare". –

3

Dal portale per gli sviluppatori di Apple link:

cancelsTouchesInView - Se un sistema di riconoscimento gesto riconosce il suo gesto, si slega le restanti tocchi di quel gesto dalla loro vista (così la finestra non li consegnerà). La finestra annulla i tocchi consegnati in precedenza con con un messaggio (toccaCancellato: conEvent :). Se un riconoscitore di movimento non riconosce il suo gesto, la vista riceve tutti i tocchi nella sequenza multi-touch.

cancelsTouchesInView:

valore booleano che colpisce se tocchi sono consegnati a una vista quando un gesto viene riconosciuto.

@property (nonatomic) BOOL cancelsTouchesInView

Discussione

Quando questa proprietà è SI (il default) e il ricevitore riconosce il suo gesto, i tocchi di quel gesto che sono in attesa non vengono consegnati alla vista e i tocchi consegnati in precedenza vengono annullati tramite un tocco Cancellati: conEvent: messaggio inviato alla vista. Se un riconoscitore non riconosce il suo gesto o se il valore di questa proprietà è NO, la vista riceve tutti i tocchi nella sequenza multitocco .

+0

Che cosa significa "i tocchi di quel gesto che sono PENDENTI .."? –

Problemi correlati