Wie arc/donut Segment Schlaganfall und Längenänderung
Ich muß Bögen animieren (aka donut Segmente) in den folgenden Szenarien animieren, wo die Lichtbogen einen konstanten Radius r zur imaginären Kreismittelhält (die Lichtbogen sitzen direkt außerhalb des Kreises).
1) Animieren Sie die Bogenhubbreite von x bis y, während Sie den Radius r und den Winkel alpha beibehalten.
2) Animieren Sie den Bogenwinkel von Alpha zu Beta, während Sie eine konstante Strichbreite und einen konstanten Radius beibehalten.
3) tun 1 und 2 zusammen, aber möglicherweise mit unabhängigen Animationen/Timings.
Hier ist, was ich bisher:
ich den Bogen als benutzerdefinierte Ansicht Zeichnung implementiert haben, die den Bogen mit CGContextAddArc einfach zieht. Dies ist für einen statischen Bogen in Ordnung, aber es animiert nichts.
Außerdem kann ich geclippte Bilder mit Dingen wie [UIBezierPath addClip] zeichnen. Das Letztere ist interessant, weil ich denke, dass ich für Szenario 1 den gewünschten Effekt auf zwei Arten erreichen kann: Entweder einen Bogen zeichnen und sowohl den Strich als auch den Radius modifizieren, um den gleichen wahrgenommenen inneren Kreisradius beizubehalten (was ich bin) Ich befürchte nicht, dass der Radius "wackelt", oder zeichne ein Segment eines Kreises, der größer wird (vielleicht durch einfaches Ändern der Skala mit einer affinen Transformation) und wird dann durch eine statische kreisförmige Maske abgeschnitten.
Nun, wie nehme ich all diese Konzepte und nagle sie in einigen tatsächlichen Zeichencode? Ich brauche keinen echten Code (obwohl das auch gut wäre), aber eher wie ein konzeptioneller Ansatz, wie kann ich das alles mit einer UIView mit benutzerdefinierter Zeichnung machen, oder müssen wir über benutzerdefinierte Key-Animationen sprechen, die ich verstehe involvieren CALayers und so. Mit anderen Worten: Was ist die richtige Architektur, um all das zu tun, was am einfachsten zu codieren wäre, während es aus einer Compositing-Perspektive für eine reibungslose Animation effizient ist?
+1, Dies wäre viel einfacher als das Tutorial, das ich verlinkt habe! – jrturton
Danke. Ich habe erreicht, was ich wollte, indem ich einen CAShapeLayer als Sublayer zu meinem benutzerdefinierten UIView hinzufüge und dann seine Eigenschaften mit CABasicAnimation animiere, wie Sie es vorschlagen. Für das Donut-Loch habe ich eine Ebenenmaske hinzugefügt. – Jaanus
Hey!Ich versuche das Gleiche zu erreichen, und es wäre schön, Code zu sehen ... Ich habe versucht, Davids Vorschlag umzusetzen, aber ich kann den "strokeEnd" nicht animieren ... Hier ist, was ich habe: https : //gist.github.com/4073608 – Eric