Animieren CAShapeLayer Größe ändern
Ich bin zeichnen Sie einen Kreis mit einem ersten radius von 200
self.circle = [CAShapeLayer layer];
self.circle.fillColor = nil;
self.circle.strokeColor = [UIColor blackColor].CGColor;
self.circle.lineWidth = 7;
self.circle.bounds = CGRectMake(0, 0, 2 * radius, 2 * radius);
self.circle.path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.radius, self.radius)
Kann jemand bitte sagen Sie mir, wie zu animieren eine änderung zu einem radius von 100?
Ist es nicht animieren, wenn Sie ändern die Grenzen in einer animation zu sperren?
Hat meine Antwort nicht?
Leider nicht. Habe ich vielleicht etwas falsch, aber der Kreis nur Neuzeichnen.
Hat meine Antwort nicht?
Leider nicht. Habe ich vielleicht etwas falsch, aber der Kreis nur Neuzeichnen.
InformationsquelleAutor Jonathan | 2012-11-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, wie ich landete, es zu tun:
Dank an Jakob für den Hinweis mich in die richtige Richtung.
Sie sollten nicht removedOnCompletion, noch fillMode. Das sollten Sie tun: selbst.Kreis = newPath.CGPath; [self.Kreis addAnimation:...]. So, der Pfad wird richtig sein, wenn die animation endet, UND Sie sind sich nicht lecken eine animation-Objekt.
Ich habe diese Methode vor und es manchmal auch schafft Speicherverluste. Du machst die animation passieren, aber das ändern nicht den Basiswert selbst.Kreis.Weg in eine dauerhafte Art und Weise... du bist nur aus einem unremoved animation angehängt, das macht den Pfad so Aussehen, wie es war für immer verändert. Siehe meine andere Antwort für ein Konzept, das funktioniert mehr sauber (und folgt die Dokumentation von Apple). Ich kämpfte mit diesem für eine lange Zeit, aber ich endlich verstehen, wie es funktioniert jetzt!
InformationsquelleAutor Jonathan
Dies ist, glaube ich, die einfachere und bevorzugte Weg, es zu tun:
Ich habe diesen Ansatz aus der Apple-Dokumentation hier (Siehe listing 3-2). Die wichtigen Dinge sind, dass Sie die Einstellung der
fromValue
und auch die Einstellung der Letzte Wert fürself.circle
'spath
zunewPath.CGPath
direkt nach dem einrichten animation. Eine animation ändert nicht den zugrunde liegenden Wert des Modells, also in dem anderen Ansatz, Sie sind nicht wirklich eine dauerhafte Veränderung der Form der Ebenepath
variable.Ich habe eine Lösung wie die gewählte Antwort in der Vergangenheit (mit
removedOnCompletion
undfillMode
etc), aber ich fand, dass auf bestimmte Versionen von iOS, die Sie verursacht, Speicher Lecks, und manchmal auch, dass der Ansatz einfach nicht funktioniert, für einige reason.Mit diesem Ansatz, erstellen Sie die animation, die explizit (wo es beginnt und wo es endet), und Sie sind unter Angabe der endgültigen dauerhaften Wert für den Pfad am Ende (Letzte Zeile), so dass es keine Notwendigkeit zu Chaos mit nicht zu entfernen die animation, wenn es fertig ist (was ich glaube ist, was führt zu Speicherverlusten, wenn Sie diese animation eine Menge Zeit... die unremoved Animationen aufbauen, in-memory).
Außerdem habe ich entfernt, die animation der
bounds
weil Sie es nicht brauchen, zu animieren, den Kreis. Auch wenn der Pfad gezeichnet wird, die außerhalb der Grenzen der Ebene, es werden immer noch angezeigt werden (siehe die Dokumentation fürCAShapeLayer
). Wenn Sie brauchen, um zu animieren, die Grenzen aus einem anderen Grund, können Sie den gleichen Ansatz verwenden (machen sicher, dass Sie denfromValue
und der Letzte Wert für Grenzen).InformationsquelleAutor Chadwick Wood
Können Sie eine
CAAnimationGroup
zu animierenbounds
undpath
IhrerCAShapeLayer
:InformationsquelleAutor Jacob Relkin
Hier ist der direkte zügige Umsetzung Jonathan code sollte jemand es brauchen.
InformationsquelleAutor satvikb