Wie kann ich einen UIGestureRecognizer programmatisch beenden / zurücksetzen?

9

Angenommen, ich verfolge gerade eine Ziehgeste. In meinem Event-Handler verwende ich einen Schwellenwert, um zu bestimmen, wann der Ziehvorgang zu einer Aktion führt. Wenn der Schwellenwert überschritten wird, möchte ich angeben, dass die Ziehbewegung abgeschlossen ist.

Das einzige, was ich in den Dokumenten finden kann, ist diese Zeile hier :

  

Wenn Sie diese Eigenschaft für eine Gestenerkennung in NO ändern   Wenn eine Geste erkannt wird, geht der Gestenerkenner zu   ein abgebrochener Zustand.

Also:

%Vor%

Das funktioniert, aber es sieht so aus, als könnte es einen besseren Weg geben.

Kennt jemand eine andere Möglichkeit, anzugeben, dass eine Geste programmgesteuert beendet wurde? Ich würde etwas wie eine Methode -end: erwarten, die ein finales Ereignis mit dem Status UIGestureRecognizerStateEnded erzeugt.

    
Mattijs 05.09.2012, 09:55
quelle

2 Antworten

7

Haben Sie einen benutzerdefinierten UIGestureRecognizer definiert? Wenn sich die von Ihnen erkannte Geste von den von Apple definierten unterscheidet, weil sie eine andere Schwelle hat oder anders als ein normaler UIPanGestureRecognizer ist, dann kann es sinnvoll sein, Ihren eigenen UIGestureRecognizer zu erstellen. ( siehe Unterklassen-Hinweise )

Wenn Sie UIGestureRecognizer unterklassifiziert haben, können Sie den Status einfach wie folgt festlegen:

%Vor%

Wahrscheinlich möchten Sie dies in der Methode touchesMoved: withEvent: tun. Beachten Sie auch:

"Unterklassen von UIGestureRecognizer müssen UIGestureRecognizerSubclass.h importieren. Diese Header-Datei enthält eine Deklaration des Status, der es zum Lesen / Schreiben macht."

Wenn Sie andererseits nur ein UIGestureRecognizerDelegate implementieren, ist der Status schreibgeschützt und es ist nicht möglich, ihn direkt festzulegen. In diesem Fall ist Ihre Methode der Deaktivierung / Aktivierung möglicherweise die beste, die Sie tun können.

    
nont 05.09.2012, 20:16
quelle
3

Mit dem Code, den Sie gezeigt haben, müssen Sie die Logik zum Starten der Animation haben, wenn der Gestenerkenner abgebrochen wird, und ich würde sagen, das ist nicht gut, da es andere Möglichkeiten gibt, wie dieser Gestenerkenner abgebrochen werden kann, ohne dass Sie ihn haben wollen die Animation fertig.

Wenn Sie eine Methode zum Starten der Animation haben, müssen Sie diese Methode nur aufrufen, wenn der Schwellenwert überschritten und die Geste normal beendet wird. Zwei verschiedene Gelegenheiten dann. Der von Ihnen präsentierte Code würde so aussehen:

%Vor%

Das Abbrechen der Geste hier kann auch nützlich sein, wenn das folgende Aktionen verhindert, wenn der Benutzer den Finger weiterhin zieht.

Wenn sich ein Team darüber entwickelt und Sie ein bestimmtes Ereignis benötigen, sollten Sie den Gestenerkenner als nicht vorgeschlagen abstufen.

    
Fábio Oliveira 06.09.2012 06:56
quelle