Wofür ich das Tap-Ereignis verwende, ist sehr zeitkritisch. Daher bin ich gespannt, ob es möglich ist, UITapGestureRecognizer zu aktivieren, wenn der Benutzer einfach aufsetzt, anstatt dass er auch nachbessern muss.
ios
objective-c
swift
uitapgesturerecognizer
user212541
quelle
quelle
Antworten:
Erstellen Sie Ihre benutzerdefinierte TouchDownGestureRecognizer-Unterklasse und implementieren Sie die Geste in touchBegan:
TouchDownGestureRecognizer.h
TouchDownGestureRecognizer.m
Implementierung:
Schnelle Implementierung:
Hier ist die Swift-Syntax für 2017 zum Einfügen:
Beachten Sie, dass dies ein Ersatz für ist
UITap
. Also in Code wie ...Sie können sicher wechseln zu ....
Tests zeigen, dass es nicht mehr als einmal aufgerufen wird. Es funktioniert als Ersatz. Sie können einfach zwischen den beiden Anrufen wechseln.
quelle
Verwenden Sie einen UILongPressGestureRecognizer und setzen
minimumPressDuration
Sie ihn auf 0. Er verhält sich während desUIGestureRecognizerStateBegan
Status wie ein Touchdown .Für Swift 4+
Für Ziel-C
quelle
UIGestureRecognizerStateEnded
minimumPressDuration
kann 0 tho sein.Schnell (ohne Unterklasse)
Hier ist eine Swift-Version ähnlich der Objective-C-Antwort von Rob Caraway .
Die Idee ist, einen Gestenerkenner mit langem Drücken zu verwenden, der
minimumPressDuration
auf Null gesetzt ist, anstatt einen Gestenerkenner zu verwenden. Dies liegt daran, dass der Gestenerkenner für langes Drücken Berührungsereignisse meldet, während die Tippgeste dies nicht tut.quelle
Dies ist eine andere Lösung. Erstellen Sie eine Unterklasse von UIControl. Sie können es wie UIView auch in Storyboard verwenden, da UIControl eine Unterklasse von UIView ist.
Und addTarget dazu:
Dann wird die festgelegte Aktion wie UIButton aufgerufen:
quelle
Ich brauchte die Fähigkeit für meine Ansicht, einen Haarauslöser zu haben, damit er reagiert, sobald er getippt wird. Die Verwendung der beiden @ LESANG-Antworten funktionierte ebenso wie die Verwendung der @ RobCaraway-Antwort . Das Problem, auf das ich bei beiden Antworten stieß, war, dass ich nicht mehr in der Lage war, Wischbewegungen zu erkennen. Ich musste meine Ansicht drehen, wenn ich wischte, aber sobald mein Finger die Ansicht berührte, wurde nur das Tippen erkannt. Der tapRecognizer war zu empfindlich und konnte nicht zwischen einem Tap und einem Swipe unterscheiden.
Dies ist, was ich basierend auf der @ LESANG-Antwort in Kombination mit dieser Antwort und dieser Antwort gefunden habe .
Ich habe in jeder Veranstaltung 6 Kommentare abgegeben.
Und um es so zu verwenden, dass die Ansicht, die es verwendet, die Haarauslöserreaktion und die Wischgesten nach links und rechts erhält:
quelle