UIView-Animation basierend auf der UIPanGestureRecognizer-Geschwindigkeit
Ich würde gerne in der Lage, sich zu bewegen eine Untersicht auf und aus dem Bildschirm, ähnlich wie beim durchsuchen zwischen den Bildern auf dem iPhone bauen in der Fotos-app, so dass, wenn die Untersicht ist mehr als die 1/2 vom Bildschirm, wenn ich gehen lassen, mit meinen finger, es muss animieren, außerhalb des Bildschirms, aber es muss auch die Unterstützung streichen, so dass, wenn der swipe-Bewegung/pan Geschwindigkeit ist hoch genug, es muss animieren off-Bildschirm, obwohl ist weniger als die 1/2 vom Bildschirm.
Meine Idee war die Verwendung UIPanGestureRecognizer und testen Sie dann auf die Geschwindigkeit. Das funktioniert auch, aber wie richte ich eine richtige animation Dauer für die Verschiebung der UIView basierend auf den anzeigen der gegenwärtigen Position und Geschwindigkeit der Pfanne, so dass es scheint glatt? Wenn ich einen festen Wert, der die animation startet entweder zu langsam oder zu schnell im Vergleich zu meinem Finger-swipe-Geschwindigkeit.
InformationsquelleAutor der Frage Neigaard | 2011-11-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die docs sagen
Also ich würde sagen, da möchten Sie die Ansicht verschieben
xPoints
(gemessen in pt) , let it go aus dem Bildschirm, Sie könnten die Berechnung der Dauer der Bewegung in etwa so:Möchten Sie vielleicht die Verwendung
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion
statt, obwohl, und probieren Sie verschiedeneUIViewAnimationOptions
.InformationsquelleAutor der Antwort Dennis
Eine Beobachtung, die sich auf die Berufung auf die Geschwindigkeit in
UIPanGestureRecognizer
: ich weiß nicht, über Ihr erleben, aber ich fand das system generiert die Geschwindigkeit auf den simulator zu sein, nicht sonderlich hilfreich. (Es ist ok auf dem Gerät, aber problematisch auf simulator.)Wenn Sie die Pfanne schnell über und abrupt aufhören, warten, und dann erst Ende der Geste (z.B. Benutzer beginnt, ein streichen, merkt, dass dies nicht das war, was Sie wollte, damit Sie aufhören, und dann lassen Sie Ihre finger), die Geschwindigkeit berichtet von
velocityInView:
amUIGestureRecognizerStateEnded
Zustand, wenn Ihre finger veröffentlicht wurde, scheint die schnelle Geschwindigkeit, bevor ich blieb stehen und wartete, in der Erwägung, dass die richtige Geschwindigkeit wäre in diesem Beispiel null (oder nahe null). Kurz gesagt, die berichtete Geschwindigkeit ist das, was es war kurz vor dem Ende der Pfanne, aber nicht die Geschwindigkeit am Ende von der Pfanne selbst.Ich landete Berechnung der Geschwindigkeit selbst, von Hand. (Es scheint dumm, dass dies notwendig ist, aber ich sehe keine Möglichkeit um ihn herum, wenn ich wirklich wollte, um die endgültige Geschwindigkeit der pan.) Bottom line, wenn der Staat
UIGestureRecognizerStateChanged
verfolgen Sie die aktuellen und vorherigentranslationInView
CGPoint sowie die Zeit, und dann mit diesen Werten, wenn ich war in derUIGestureRecognizerStateEnded
zu berechnen, die tatsächliche Endgeschwindigkeit. Es funktioniert ziemlich gut.Hier ist mein code für die Berechnung der Geschwindigkeit. Ich bin zufällig zu sein, nicht mit Geschwindigkeit, um herauszufinden, die Geschwindigkeit der animation, sondern ich verwende es, um zu bestimmen, ob der Benutzer entweder verrissen weit genug, oder schnippte schnell genug für die Ansicht zu bewegen, mehr als die Hälfte Weg über den Bildschirm und löst dadurch die animation zwischen den Ansichten, aber das Konzept der Berechnung der Endgeschwindigkeit scheint zutreffend zu dieser Frage. Hier ist der code:
InformationsquelleAutor der Antwort Rob
In den meisten Fällen die Einstellung
UIViewAnimationOptionBeginFromCurrentState
option fürUIView
animator ist genug, um eine einwandfrei weiter animation.InformationsquelleAutor der Antwort nikans