Ich habe mir die sehr coole neue Klasse UIViewPropertyAnimator
in iOS 10 angeschaut. Sie können einfach Dinge wie das Anhalten, Fortsetzen und Umkehren von UIView-Animationen während des Fluges tun. Früher mussten Sie die zugrunde liegenden CAAnimationen manipulieren, die das System erstellte, um dies mit UIView-Animationen zu tun.
Die neue Klasse UIViewPropertyAnimator
hat eine Eigenschaft fractionComplete
. Es variiert von 0.0 (Beginn der Animation) bis 1.0 (Ende der Animation). Wenn Sie den Wert ändern, können Sie eine Animation von Anfang bis Ende "scrubben".
Ich habe ein Demo-Projekt auf Github namens KeyframeViewAnimations , mit dem Sie einen Schieberegler verwenden können, um UIView zu scrubben und CAAnimationen hin und her mit ziemlich geheimnisvollen CAAnimation-Tricks. Während die Animation ausgeführt wird, bewegt sich der Schieberegler von Anfang bis Ende, um den Fortschritt der Animation anzuzeigen. Dieses Projekt wurde in Objective-C geschrieben, bevor Swift veröffentlicht wurde, aber die zugrunde liegenden Techniken sind die gleichen in Objective-C oder Swift.
Ich habe beschlossen, ein gleichwertiges Projekt mit UIViewPropertyAnimator
zu erstellen. Es gibt einige Macken, aber es ist ziemlich einfach. Eine Sache, die ich nicht sauber machen konnte, war, den Fortschritt der fractionComplete
-Eigenschaft der Animation zu beobachten, so dass ich den Schieberegler während der Animation aktualisieren konnte. Ich habe versucht, KVO (Schlüssel-Wert-Beobachtung) auf der fractionComplete
-Eigenschaft einzurichten, aber es löst keine KVO-Benachrichtigung aus, bis die Animation abgeschlossen ist.
Was ich getan habe, ist, einen Timer einzurichten, der in einem sehr kleinen Intervall läuft und die UIViewPropertyAnimator
-Eigenschaft von fractionComplete
wiederholt abfragt und den Slider aktualisiert, während er fortschreitet. Es funktioniert, aber es ist keine sehr saubere Art, Dinge zu tun. Es wäre viel besser, wenn es eine Möglichkeit gäbe, über den Fortschritt der Animation benachrichtigt zu werden.
Ich hoffe, dass ich etwas vermisse.
Sie können das UIViewPropertyAnimator
basierte Projekt auf Github unter folgendem Link sehen: UIViewPropertyAnimator-test .
Der Code, der den Fortschrittswert vom Animator erhält, ist dieser Code:
%Vor% Ich sollte den obigen Code wahrscheinlich konvertieren, um einen CADisplayLink
Timer anstelle eines Vanilla Timers (NSTimer) zu verwenden, aber ich hoffe, dass es einen besseren Weg gibt.
Tags und Links ios animation uiview uiviewpropertyanimator