2013-04-08 5 views
5

Aus der Lektüre die UIGestureRecognizer Class Reference es wird angedeutet, dass der API priorisieren die Priorisierung von Berührungen und Gestensteuerung für Sie, um sicherzustellen, handhabt, dass Ihre touchesBegan und verwandte Verfahren nicht auf der Ansicht aufgerufen werden, es sei denn die Geste Erkenner hat erste fehlgeschlagen:Wie Geste Erkenner und berühren in einem UIView

ein Fenster liefert Touch-Ereignisse zu einem Gestenerkenner, bevor es sie auf die Treffergeprüften Ansicht an den Gestenerkenner liefert. Wenn ein Gestenerkenner den Berührungskontakt in einer Multitouch-Sequenz analysiert und seine Geste nicht erkennt, erhält die Ansicht im Allgemeinen den vollständigen Satz von Berührungen. Wenn ein Gestenerkenner seine Geste erkennt, werden die verbleibenden Berührungen für die Ansicht abgebrochen.

Ich habe eine Wischgeste zu meiner Ansicht hinzugefügt, und es funktioniert. Über eine Protokollierung, wenn ich einen einzelnen Swipe mache, meldet die Methode als solche. Allerdings ist meine touchesBegan Methode auch Berichterstattung über sein Protokoll, obwohl die touchesCancelled Methode ist, wie erwartet, auch eine Nachricht erhalten.

Ich will, und erwarte, die Geste zu erkennen, touchesBegan oder touchesMoved zu verhindern, dass sie aufgerufen werden.

Also meine Frage ist: für die Gestenerkennung in der Tat Berührungen basierend auf seinem Zustand zu verzögern, gibt es zusätzliche Setup notwendig? Die Doktoren schlagen nichts anderes als notwendig vor.

Mein Setup ist einfach:

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

Ich habe auch diesen Test versucht, um sicherzustellen, dass eine Erkennungs vor der Verarbeitung mit touchesBegan (dieser Test sollte nicht notwendig sein, wenn Sie glauben, was die Dokumentation über ausgefallen sagen), aber die touchesBegan noch verarbeitet die Log-Linie nach diesem Test:

if (swipeUpTwoFinger.state==UIGestureRecognizerStateFailed)

Antwort

7

Es klingt wie Sie brauchen: swipeUpTwoFinger.delaysTouchesBegan = YES;

+0

tatsächlich habe ich gerade festgestellt, dass es standardmäßig nicht aktiviert ist. Vielen Dank. – johnbakers

Verwandte Themen