touchesEnded nicht aufgerufen wird??? oder nach dem Zufallsprinzip aufgerufen wird
Wenn ich Hebe meine finger sich vor der ersten Berührung, dann erkennt es das nächste Note gut. Es ist nur, wenn ich meinen ersten touch-down kontinuierlich und versuchen Sie dann, und berühren Sie einen anderen Bereich mit einem anderen finger zur gleichen Zeit. Es wird dann fälschlicherweise registrieren, die zweite Note als von der ersten Berührung wieder.
Update Es hat etwas zu tun mit touchesEnded nicht aufgerufen, bis die LETZTE Note beendet hat (es ist nicht egal, wenn man schon 5 andere Ende berührt, bevor Sie schließlich gehen lassen, der Letzte... er ruft Sie alle zu Ende, wenn die Letzte Note endet)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch* touch = [touches anyObject];
NSString* filename = [listOfStuff objectAtIndex:[touch view].tag];
//do something with the filename now
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
ITouch* touch = [touches anyObject];
NSString* buttonPressed = [listOfStuff objectAtIndex:[touch view].tag];
//do something with this info now
}
- Habe ich eine einfache test-Projekt und es scheint, dass touchesEnded wird jedes mal aufgerufen, wenn ein beliebiger finger gehoben wird...
- Vladimir, würden Sie bitte buchen Sie Ihr code-Beispiel irgendwo, so dass ich sehen kann, was unterscheidet sich? Aus welchem Grund auch immer, alle meine touchesEnded bekommen später alle zur gleichen Zeit statt, wenn Sie tatsächlich passieren
- Übrigens, in meinem Programm die Extras sind auf UIImageViews innerhalb einer scrollview und das alles innerhalb einer UIView, wenn das einen Unterschied macht
- Vladimir, Könnte es damit etwas zu tun haben mit all den UIImageViews innerhalb einer scrollview? Außerhalb der scrollview Sie das gut machen und senden Sie die touchesEnded Nachricht sofort, aber innerhalb der scrollview Sie nicht senden Sie die Nachricht sofort. Hat diese Verzögerung irgendwie oder ist es nicht gesendet, bis die responder-Kette richtig?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte heute (oder eher, ich hatte dieses problem gedumpten auf mich heute!).
Was ich sah, passiert:
Als Gavin Clifton sagte, es nur passiert, wenn Sie hinzufügen, eine gestik-Erkennung. Ohne ein Erkennungsmodul Hinzugefügt, touchesEnded feuert nach jedem finger freigegeben wird. , Die groß sein würde, wenn ich nicht verwenden müssen Merkmale...!!!
Ich löste dies durch hinzufügen gestureRotation.delaysTouchesEnded = FALSE; zu meinem recognizer erstellen/hinzufügen von code:
Nun die gesten der Arbeit und touchesBegan nicht mehr anstehen!
Aus welchem Grund auch immer, touchesEnded verzögert sich nur, wenn der touch ist in der scrollview. Wenn Sie entweder a) deaktivieren Sie die scrollview aus scrollen; oder b) nicht mit einem scrollview, dann touchesEnded wird sofort geliefert.
Ich habe gehört, wo einige Leute abgefangen haben sendEvent, aber das scheint lückenhaft zu mir und ich wirklich nicht wollen, zu versauen die responder-Kette seit sendEvent verarbeitet eine Menge von Ereignissen.
Zusätzliche Gedanken? Hat schon mal jemand Unterklassen UIWindow, um zu versuchen und abzufangen, die Berührungen, die Art und Weise? Jeder input, den Sie liefern könnten, wird geschätzt.
Dem scrollview hat eine Eigenschaft
delaysContentTouches
dieYES
standardmäßig. Es werden unverzüglich alle touch-Ereignisse, bis es feststellt, dass ein scrolling-Geste.Ich weiß, diese Frage ist ein bisschen alt, aber ich dachte, ich Teile meine Erfahrung für jeden, der stolpert über diesen thread nach einer Antwort zu suchen, wie ich nur haben.
Ich habe gekämpft, mit diesem problem für ein paar Stunden und die einzige Lösung, die ich tun konnte, war zu entfernen UIGestureRecognizer Objekte, die ich mit war.
Für mein setup, ich war mit pan und Tippen Sie auf Merkmale zu erfassen, diese gesten, und die Verwendung von touchesBegan und touchesEnded für alle standard-touch-Ereignisse. Es war nicht, bis ich entfernte die UIGestureRecognizer-Objekte, die touchesEnded Methode angefangen immer wieder aufgerufen, für die zweite touch-Ende. Genauer gesagt, es war der pan-Erkennung, verursacht die Probleme.
Ich bin mir nicht ganz sicher, ob dies in diesem Fall gilt es aber, die Probleme gelöst, die ich hatte.
Set
multipleTouchEnabled
.In Interface Builder, es ist die "Multiple-Touch" - Häkchen unter "Benutzer-Interaktion Aktiviert".
Ich hatte gerade dieses problem, wo ein
touchesEnded
würde nie aufgerufen werden, auf eine Schaltfläche innerhalb einer ScrollView. Basierend auf Ovidiu Antwort, entdeckte ich, dass die manuelle Einstellung der ContentOffset meiner ScrollView war das problem verursacht. Vermutlich haben die contentOffset legen Sie die Weise, die ich hatte, es war verwirrend, die ScrollView als ob ich versuchte, den Knopf zu drücken oder scrollen Sie die Ansicht.Vermietung der offset bleiben bei
0,0
gemacht das problem Weg.Fand ich eine weitere option.
Nach
touchesBegan
undCGPoint
nicht entsprechend verschobentouchesMoved
,touchesCancelled
genannt.Jedoch, Wenn
CGPoint
verändert nachtouchesMoved
,touchesEnded
genannt.