Auf dem Mac kann man immer die Position der Maus "außerhalb des Ereignisstroms" erhalten (dh, selbst wenn Sie keine Delegiertenmethoden für mouseUp:
und andere abonniert haben), indem Sie [NSEvent mouseLocation]
aufrufen.
Gibt es eine Möglichkeit für iOS, aktuelle Berührungsereignisse zu erhalten, ohne touchesBegan:
zu hören?
Ich frage, weil es mindestens eine Situation gibt, in der touchesBegan nicht aufgerufen wird: beim Start der App, wenn touchBegan bereits ausgeführt wird, wird touchBegan nie aufgerufen . In der Tat werden auch keine der berührungsbezogenen UIEvent-Methoden so genau aufgerufen, wie ich sagen kann (anscheinend auch nicht das /% UI-Anwendungsfenster sendEvent:
).
Ich möchte das Verhalten meiner App leicht variieren, je nachdem, ob beim Start eine Berührung stattfindet. Gibt es eine Möglichkeit, beim App-Start eine laufende Berührung zu erkennen? ?
?Dies ist nicht möglich. Der einfache Grund: Die Berührungsereignisse gehören nicht zu Ihrer App. Jede Berührung gehört zu einem UI-Element (oder Responder). Wie Sie bereits wissen, erhält dieses Element die begonnenen, verschobenen, beendeten, abgebrochenen Nachrichten.
Dies gilt sogar für eine richtig programmierte App: Alle Ereignisse, die one betreffen, werden an dasselbe Objekt gesendet. Wie könnte ein anderes Objekt schließlich wissen, was mit diesem Ereignis geschehen soll und wie sollte das erste Objekt das erwartete Verhalten ordnungsgemäß beenden?
Sie können (oder könnten, sollten aber wahrscheinlich nicht) eine Arbeit in Ihrer App finden, da Cross-App-Touch-Passings einfach nicht möglich sind.
Und auf dem Mac können Sie die Mausposition abfragen, aber im normalen Anwendungsablauf wird immer eine Maustaste gedrückt, bevor Sie ein Mausereignis erhalten.
Um ehrlich zu sein, ich sehe keinen Grund, warum das sowieso nötig wäre ... Oh, Moment mal ... Ich könnte mein App-Icon in verschiedene Bereiche aufteilen ... nicht sicher, ob es bereits Datenschutzgesetze verletzen würde, Wenn Sie jedoch wissen, wo der Benutzer sein Symbol auf dem Bildschirm hat.
Ich denke, Sie könnten den Anwendungsstart einfach "verlängern". Als ich während des Starts meiner Anwendung zeitraubende Aufgaben hatte, zeigte ich während der Ausführung der Aktion denselben Begrüßungsbildschirm mit einem UIActivityIndicator.
Sie könnten einfach einen NSTimer erstellen, ungefähr 2 Sekunden warten und während dieser Zeit nach Berührungen suchen, während der Begrüßungsbildschirm immer noch angezeigt wird.
Um dies zu tun, drücken Sie in applicationDidFinishLaunch einen ViewController, der genau wie der Startbildschirm aussieht und nach Berührungen in diesem ViewController sucht. Nach diesen 2 Sekunden fahren Sie mit der normalen Initialisierung fort. Dieses Verhalten hilft auch, wenn Sie während der Initialisierung zeitaufwendige Aufgaben haben.
Ich weiß, es ist ein Workaround, aber ich schätze, es ist nicht möglich, nach Berührungen zu suchen, weil die Anwendung am Hauptthread arbeitet und die Berührungen auch im Hauptthread verarbeitet werden. Dies kann auch passieren, weil keine ViewControllers oder UIWindow initialisiert und bereit sind, Berührungen zu hören.
Ich hoffe, es hilft.
Tags und Links ios cocoa-touch uitouch uievent