animiert mehrere CALayers, aber nicht im selben Zeitbereich

8

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?

    
Ashley Clark 18.02.2009, 23:39
quelle

5 Antworten

17

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%     
Ashley Clark 19.02.2009, 00:28
quelle
14

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;

    
kkahl 07.05.2012 09:01
quelle
5

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.

    
troppoli 06.03.2014 18:29
quelle
0

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.

    
miguel.de.icaza 02.07.2010 17:41
quelle
0

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%     
Rob Norback 30.07.2017 18:19
quelle

Tags und Links