2012-04-12 5 views
3

Ich kann nirgendwo in der Dokumentation finden. Wenn diese Nachricht auf meiner Unterklasse von UIView genannt:Objective-C: Holen Sie sich das UITouch, für das das UIEvent ausgelöst wurde

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 

Wie kann ich den Kontakt zu treten, für die diese Mitteilung genannt wurde?

Sowohl im NSSet als auch im UIEvent kann ich nur Berührungen erhalten, aber keinen eindeutigen Bezeichner, so dass ich feststellen kann, welche Berührung die Nachricht ausgelöst hat.

PS: warum auf Teufel würde sie einen NSSet aller berührt, und auch die Möglichkeit, sendet den gleichen Satz erhalten von [[event allTouches] anyObject]

Antwort

8

Sie nicht den Kontakt treten können, weil manchmal mehr Berührungen ausgelöst die Nachricht. Wenn der Benutzer zwei Finger auf dem Bildschirm hat und beide bewegt, können Sie eine einzelne touchesMoved:withEvent: bekommen, in der beide Berührungen aktualisiert werden.

Sie müssen jede Berührung im touches Set verarbeiten. Wenn Sie Multitouch für die Ansicht deaktiviert haben, so dass Sie wissen, dass nur eine Berührung im Satz vorhanden ist, können Sie touches.anyObject verwenden, um die Berührung zu erhalten. Wenn Sie Multitouch jedoch nicht deaktiviert haben, müssen Sie alle Berührungen im Set durchlaufen.

Die Nachricht enthält eine Reihe von Berührungen, die von event.allTouches getrennt sind, da der Benutzer möglicherweise drei Finger nach unten hat, aber nur einen oder zwei davon bewegt. Das touches Set enthält nur die verschobenen Berührungen, aber event.allTouches enthält alle Berührungen des Benutzers, einschließlich der Berührungen, die seit der letzten Nachricht nicht verschoben wurden.

Die eindeutige Kennung für die Berührung ist das Objekt UITouch. Wenn der Benutzer einen Finger auf den Bildschirm legt, erstellt iOS ein Objekt UITouch. Es aktualisiert dieses Objekt, wenn der Benutzer seinen Finger bewegt. Sie können also das Objekt UITouch als Schlüssel in einem NSDictionary verwenden, oder Sie können eigene Objekte mit objc_setAssociatedObject daran anhängen.

+0

Wow! Vielen Dank für Ihre ausführliche Antwort. Jetzt macht alles Sinn :) –