Ich habe mehrere CALayers
, die ich versuche, mit jeder Ebene, die etwas verzögert ist, zu einer neuen zPosition
zu animieren.
Jede Animation sollte 0,25 Sekunden dauern und 0,05 Sekunden nach dem Start der vorherigen Animation beginnen. Am Ende jeder Animation wird die Ebene aus der Ebenenstruktur entfernt.
Ich habe erfolgreich die -animationDidStop:finished:
-Delegate-Methode verwendet, um meine Ebenen zu entfernen, wenn sie fertig sind, aber ich konnte die Animationen nicht richtig ordnen.
Ist es möglich, Animationen auf diese Weise zu planen, und wie?
Ich würde immer noch gerne andere Vorschläge hören, aber ich denke, ich habe das gelöst.
Ich erstelle jetzt spezifische CAAnimation
Objekte und spezifiziere ihre beginTime
Eigenschaft. Ich machte das früher und es funktionierte nicht, was ich schließlich erkannte, ist, dass für die Eigenschaft beginTime
, die beachtet werden soll, die Animation zu einem CAAnimationGroup
hinzugefügt werden muss.
Also, mein Code sieht so aus:
%Vor%Ich habe festgestellt, dass die BeginTime-Eigenschaft in der Tat funktioniert, ohne die Animationen in eine Gruppe zu setzen, wenn Sie ihren Wert als Delta von dem von der CACurrentMediaTime () -Funktion von QuartzCore zurückgegebenen Wert beziehen.
z.B. anim.beginTime = CACurrentMediaTime() + 0.05;
Ich wünschte, ich hätte den Rep kommentieren müssen, aber der Grund, warum anim.beginTime auf CACurrentMediaTime () eingestellt ist, wird von einigen anderen Dokumenten aufgedeckt:
AVCoreAnimationBeginTimeAtZero Verwenden Sie diese Konstante, um die Eigenschaft animation beginTime von CoreAnimation auf die Zeit 0 zu setzen. Die Konstante ist ein kleiner positiver Wert ungleich Null, der CoreAnimation daran hindert, 0.0 durch CACurrentMediaTime zu ersetzen. Verfügbar in iOS 4.0 und höher. In AVAnimation.h deklariert.
Die normale Einstellung von beginTime auf 0 ist also eine Kurzform für die Einstellung auf CACurrentMediaTime (). So können Sie den Start verschiedener Gruppen staffeln.
Danke, dass Sie Ihre Ergebnisse geteilt haben. Ich habe außerdem herausgefunden, dass die BeginTime-Eigenschaft nicht funktioniert, wenn sie ohne eine Gruppe verwendet wird.
In meinem Fall wurden einige der Einstellungen wie BeginTime und Duration ignoriert, wenn sie in CABasicAnimation festgelegt wurden, aber funktionierten, wenn sie direkt auf CAAnimationGroup gesetzt waren.
Schnell 3
Stellt sich heraus, dass Sie dies relativ einfach tun können, indem Sie Folgendes tun:
%Vor%Alle Ebenen sind CALayer oder CAShapeLayer, und falls Sie sich fragen, was ovalPathSmall und ovalPathLarge sind:
%Vor%Tags und Links core-animation