2012-10-24 3 views

Antwort

29

ACB zitiert die UIGestureRecognizer Referenz. Um es ein wenig konkreter zu machen, dass Sie eine Ansicht mit einer Pfanne Gestenerkenner angeschlossen haben, und Sie haben diese Methoden in Ihrem View-Controller:

- (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"); 
} 

Und natürlich die pan Gestenerkenner konfiguriert ist, die panGestureRecognizerDidUpdate: senden Botschaft.

Angenommen, Sie berühren die Ansicht, bewegen Sie Ihren Finger so weit, dass die Schwenkbewegung erkannt wird, und heben Sie dann Ihren Finger. Was druckt die App?

Wenn die Gestenerkenner cancelsTouchesInView Satz YES hat, die App wird diese Nachrichten protokollieren:

touchesBegan 
touchesMoved 
touchesCancelled 
panGesture 
panGesture 
(etc.) 

Sie könnten bekommen mehr als eine touchesMoved vor dem Abbrechen.

Wenn Sie also cancelsTouchesInView auf YES (Standardeinstellung) setzen, bricht das System die Berührung ab, bevor die erste Nachricht vom Gestenerkenner gesendet wird, und Sie erhalten keine weiteren berührbezogenen Nachrichten für diese Berührung.

Wenn die Gestenerkenner cancelsTouchesInView Satz NO, die App diese Meldungen protokolliert hat:

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

Also, wenn Sie setzen cancelsTouchesInView-NO, das System für die berührungsbezogene Nachrichten senden, wird fortgesetzt Gestenberührung, verschachtelt mit den Nachrichten der Gestenerkenner. Die Berührung wird normal beendet, anstatt abgebrochen zu werden (es sei denn, das System bricht die Berührung aus einem anderen Grund ab, z. B. wenn die Home-Taste während der Berührung gedrückt wird).

+0

Danke! Wenn Sie cancelsTouchesInView auf Nein setzen, wird das Ereignis abgebrochen, richtig? – jebberwocky

+1

Ich verstehe nicht, was "Abbrechen Popping" bedeutet. –

3

link aus dem Apple-Entwicklerportal im offiziellen Dokument behandelt:

cancelsTouchesInView - Wenn ein Gestenerkenner seine Geste erkennt, es entbindet die restlichen Noten von diese Geste aus ihrer Sicht (so das Fenster wird sie nicht liefern). Das Fenster löscht die zuvor mit einer Nachricht (touchesCancelled: withEvent :) gelieferten gelieferten Berührungen. Wenn ein Gestenerkenner seine Geste nicht erkennt, empfängt die Ansicht alle Berührungen in der Multi-Touch-Sequenz.

cancelsTouchesInView:

Ein boolescher Wert beeinflussen, ob Berührungen zu einer Ansicht geliefert, wenn eine Geste erkannt wird.

@property (nonatomic) BOOL cancelsTouchesInView

Discussion

Wenn diese Eigenschaft JA ist (der Standard) und der Empfänger erkennt seine Geste, die Berührungen dieser Geste, die anhängig sind, werden nicht an die Sicht geliefert und zuvor abgegebene Berührungen werden durch eine touchesCancelled abgebrochen: withEvent: Nachricht an die Ansicht gesendet. Wenn eine Geste recognizer ihre Geste nicht erkennt oder der Wert dieser Eigenschaft NEIN ist, empfängt die Ansicht alle Berührungen in der Multi-Touch-Sequenz .

+0

Was ist durch "die Berührungen dieser Geste, die ausbleiben .."? –