Animieren der shadowPath-Eigenschaft von CALayer

8

Mir ist bewusst, dass der shadowPath eines CALayers nur mit expliziten Animationen animierbar ist, aber ich kann das immer noch nicht zum Laufen bringen. Ich vermute, dass ich das toValue nicht richtig übergebe - da ich weiß, dass dies ein id sein muss, nimmt die Eigenschaft einen CGPathRef. Das Speichern in UIBezierPath scheint nicht zu funktionieren. Ich verwende den folgenden Code zum Testen:

%Vor%

(Ich verwende Minuswerte, um sicherzustellen, dass der Schatten über eine darüber liegende Ansicht hinausreicht ... die masksToBounds -Eigenschaft der Ebene wird auf NO gesetzt).

Wie wird die Animation des shadowPath erreicht?

AKTUALISIEREN

Problem fast gelöst. Leider war das Hauptproblem ein etwas unvorsichtiger Fehler ...

Der Fehler, den ich gemacht habe, war, die Animation der Root-Ebene des View-Controllers hinzuzufügen, anstatt der Ebene, die ich dem Schatten zugewiesen hatte. Auch @ pe8ter war korrekt, da toValue ein CGPathRef caste auf id sein muss (offensichtlich, als ich das vorher versucht hatte, hatte ich aufgrund des falschen Ebenenfehlers noch keine Animation). Die Animation funktioniert mit dem folgenden Code:

%Vor%

Ich weiß, dass das anhand des von mir bereitgestellten Beispielcodes schwer zu erkennen war. Hoffentlich kann es aber auch für Menschen in einer ähnlichen Situation von Nutzen sein.

Wenn ich jedoch versuche, die Zeile hinzuzufügen

%Vor%

Die Animation funktioniert nicht mehr und der Schatten springt sofort zur endgültigen Position. Textdokumente sagen, dass die Animation mit demselben Schlüssel wie die geänderte Eigenschaft hinzugefügt werden soll, um die implizite Animation zu überschreiben, die beim Festlegen des Werts der Eigenschaft erstellt wird. ShadowPath kann jedoch keine impliziten Animationen generieren. Wie bekomme ich die neue Eigenschaft? nach der Animation zu bleiben?

    
Stuart 07.05.2011, 23:39
quelle

2 Antworten

7

Zuerst haben Sie die fromValue der Animation nicht festgelegt.

Zweitens hast du Recht: toValue akzeptiert CGPathRef , außer dass es in id umgewandelt werden muss. Tun Sie etwas wie folgt:

%Vor%

Sie müssen auch die Eigenschaft shadowPath der Ebene explizit festlegen, wenn die Änderung nach der Animation beibehalten werden soll.

    
pe8ter 08.05.2011, 10:01
quelle
1
%Vor%     
T T Marshel Daniel 06.08.2015 11:21
quelle

Tags und Links