Wenn ich meinen Finger von der ersten Berührung hochhebe, wird er die nächste Berührung gut erkennen. Es ist nur, wenn ich meine erste Berührung kontinuierlich halte und dann versuche, einen anderen Bereich mit einem anderen Finger gleichzeitig zu berühren. Es wird dann diese zweite Berührung fälschlicherweise als von der ersten Berührung erneut registriert.
Update Es hat etwas mit touchesEnded zu tun, das nicht aufgerufen wird, bis die LETZTE Berührung beendet ist (es ist egal, ob du schon 5 andere Berührungen hast, bevor du die letzte loslässt man ... ruft sie alle auf, sobald die allerletzte Berührung beendet ist)
%Vor%Aus welchem Grund auch immer, touchsEnded wird nur dann verzögert, wenn sich die Berührung im Bildlauf befindet. Wenn Sie entweder a) die Scrollansicht vom Scrollen abhalten, oder b) Verwenden Sie keine Scrollview, dann berührt berührtEnded wird sofort geliefert.
Ich habe gehört, dass einige Leute sendEvent abgefangen haben, aber das scheint für mich nur flüchtig zu sein und ich möchte wirklich nicht die Responder-Kette vermasseln, da sendEvent sehr viele Ereignisse behandelt.
Irgendwelche zusätzlichen Gedanken? Hat jemand jemals UIWindow unterklassifiziert, um die Berührungen auf diese Weise abzufangen? Jede Eingabe, die Sie bereitstellen könnten, wird geschätzt.
Ich hatte das heute (oder eher hatte ich dieses Problem heute bei mir!).
Was ich gesehen habe passiert:
Wie Gavin Clifton sagte, passiert es nur, wenn Sie eine Gestenerkennung hinzufügen. Wenn kein Erkenner hinzugefügt wurde, wird touchsende nach dem Loslassen jedes Fingers ausgelöst. Was wäre toll, wenn ich keine Erkenner benutzen müsste ... !!!
Ich habe das gelöst, indem ich gesteRotation.delaysTouchesEnded = FALSE; zu meinem Erkennungscode hinzugefügt habe:
%Vor%Jetzt funktionieren die Gesten und BerührungenBegan steht nicht länger Schlange!
Ich weiß, dass diese Frage ein bisschen alt ist, aber ich dachte, ich würde meine Erfahrung für jeden teilen, der über diesen Thread stolpert und nach einer Antwort sucht, wie ich es gerade getan habe.
Ich habe einige Stunden mit diesem Problem gekämpft und die einzige Lösung, die ich mir vorstellen konnte, war, alle UIGestureRecognizer Objekte zu entfernen, die ich benutzte.
Für mein Setup habe ich Pan- und Tap-Recognizer verwendet, um diese Gesten einzufangen und touchesBegan und touchesEnded für alle Standard-Touch-Events zu verwenden. Erst nachdem ich die UIGestureRecognizer-Objekte entfernt hatte, wurde die touchsEnded-Methode für die zweite Touch-Beendigung erneut aufgerufen. Insbesondere war es der Pan Recognizer, der die Probleme verursachte.
Ich bin mir nicht ganz sicher, ob das in diesem Fall zutrifft, aber es löste die Probleme, die ich hatte.
Setze multipleTouchEnabled
.
Im Interface Builder ist das Kontrollkästchen "Multiple Touch" unter "Benutzerinteraktion aktiviert" aktiviert.
Ich hatte gerade dieses Problem, bei dem ein touchesEnded
niemals auf einer Schaltfläche innerhalb einer ScrollView aufgerufen würde. Basierend auf der Antwort von Ovidiu entdeckte ich, dass das manuelle Setzen des ContentOffsets meiner ScrollView das Problem verursachte. Vermutlich hat die Einstellung von contentOffset die Art und Weise, wie ich es hatte, die ScrollView dahingehend verwirrt, ob ich versuchte, die Schaltfläche zu drücken oder die Ansicht zu scrollen.
Wenn der Offset bei 0,0
belassen wurde, verschwand das Problem.
Ich habe eine andere Option gefunden.
Nach touchesBegan
und CGPoint
nicht verschoben nach touchesMoved
, touchesCancelled
aufgerufen.
Allerdings, wenn CGPoint
entsprechend touchesMoved
, touchesEnded
geändert wurde.
Tags und Links iphone touchesbegan multi-touch uitouch