touchesEnded wird nicht aufgerufen ??? oder zufällig angerufen werden

8

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%     
iwasrobbed 28.04.2010, 02:51
quelle

7 Antworten

7

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.

    
iwasrobbed 04.05.2010, 02:35
quelle
9

Ich hatte das heute (oder eher hatte ich dieses Problem heute bei mir!).

Was ich gesehen habe passiert:

  • Touchscreen mit Finger 1
  • berührtBegan Brände
  • Touchscreen mit Finger 2
  • berührtBegan Brände
  • Geben Sie Finger 2 frei
  • passiert nichts
  • Geben Sie Finger 1 frei
  • berührtEndete Brände
  • berührtEndete Brände

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!

    
Jamie Lowes 13.07.2012 10:01
quelle
6

Der Bildlauf hat eine Eigenschaft delaysContentTouches , die standardmäßig auf YES gesetzt ist. Es wird alle Berührungsereignisse verzögern, bis eine Scrollgeste festgestellt wird.

    
Ovidiu 09.10.2011 22:54
quelle
4

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.

    
Gavin Clifton 21.06.2012 19:34
quelle
0

Setze multipleTouchEnabled .

Im Interface Builder ist das Kontrollkästchen "Multiple Touch" unter "Benutzerinteraktion aktiviert" aktiviert.

    
Steven Fisher 28.04.2010 02:57
quelle
0

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.

    
Nerrolken 24.07.2015 23:59
quelle
0

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.

    
Seungyoun Yi 12.02.2018 06:12
quelle