Ich habe die folgende einfache UIImageView Animation:
%Vor%Aber ich habe ein Problem, wenn die Animation aufhört Ich weiß nicht, was der letzte Frame ist, bei dem es aufhört !! also ist das Ende der Animation überhaupt nicht glatt.
also muss ich:
1) wissen, was das letzte Bild ist, bei dem die Animation endet, also setze ich es als letztes Bild der Animation und dies führt zu einem sanften Stoppen.
2) Stoppen Sie diese Animation schrittweise, d. h. ändern Sie ihre Dauer, bevor sie stoppt, um sie zuerst zu verlangsamen und dann zu stoppen.
Ich weiß, dass Ihre ursprüngliche Implementierung animationImages
verwendet, aber ich kenne keine Möglichkeit, animationImages
direkt mit einer kontinuierlich variablen Dauer zu verwenden. Dies ist jedoch eine ziemlich einfache Funktion, die Sie selbst implementieren können. Wenn Sie dies tun, können Sie einen dynamischen Wert für die Dauer zwischen Bildern in Ihrem Array codieren.
Im folgenden Code ersetze ich animationImages
durch eine benutzerdefinierte Schrittfunktion und passt die Dauer dynamisch an, nachdem ein Stopp angefordert wurde. Beachten Sie, dass dies ein wenig anders ist als Ihr ursprünglicher Code, der eine harte Endzeit angegeben hat. Dieser Code gibt an, wann das Drehen des Zahnrads
Wenn Sie wirklich einen harten Animationszeitraum haben, können Sie den Aufruf von stopTheAnimation
anpassen, um den Verzögerungsfaktor zu berücksichtigen (Ich verlängere einfach die Dauer um 10% pro Schritt, während der Verzögerung, bis die Schritte langsamer sind als ein bestimmter Schwellenwert):
Ich kenne das nur, indem ich Blöcke benutze, aber so geht das:
%Vor%Die Option 'UIViewAnimationOptionCurveEaseOut' sollte Ihre Animation allmählich stoppen. Sie können mit anderen Optionen spielen, um den Effekt für sich selbst zu sehen.
Ihr Ansatz hat ein Problem: Die Anzahl der Bilder pro Sekunde ist nicht konstant (Sie verlangsamen die Zeit).
Sind Sie sicher, dass Sie eine Rahmenanimation benötigen?
Wenn Ihre Animation mit geometrischen (affinen) Transformationen erreicht werden kann, wäre es wirklich besser.
Wenn Ihre Animation mit einer Kombination von:
durchgeführt werden kanndann ist dies eine affine Transformation.
Tags und Links objective-c iphone ios uiimageview