Wie zu Animieren CoreGraphics Zeichnung der Form Mit CAKeyframeAnimation
Ich versuche zu animieren, die Zeichnung eines UIBeizerPath (in meinem Beispiel ein Dreieck) in eine UIView-Unterklasse. Aber, die gesamte Untersicht wird die Animation statt die Form.
Gibt es etwas, was ich bin fehlt mit der animation?
- (void)drawRect:(CGRect)rect {
CAShapeLayer *drawLayer = [CAShapeLayer layer];
drawLayer.frame = CGRectMake(0, 0, 100, 100);
drawLayer.strokeColor = [UIColor greenColor].CGColor;
drawLayer.lineWidth = 4.0;
[self.layer addSublayer:drawLayer];
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(0,0)];
[path addLineToPoint:CGPointMake(50,100)];
[path addLineToPoint:CGPointMake(100,0)];
[path closePath];
CGPoint center = [self convertPoint:self.center fromView:nil];
[path applyTransform:CGAffineTransformMakeTranslation(center.x, center.y)];
[[UIColor redColor] set];
[path fill];
[[UIColor blueColor] setStroke];
path.lineWidth = 3.0f;
[path stroke];
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.duration = 4.0f;
pathAnimation.path = path.CGPath;
pathAnimation.calculationMode = kCAAnimationLinear;
[drawLayer addAnimation:pathAnimation forKey:@"position"];
}
- Genau erklären, was "animieren der Zeichnung eines UIBezierPath" bedeutet. Wollen Sie es zum zeichnen der einzelnen Segmente, eins nach dem anderen, oder was?
- ja, ich möchte animieren der Zeichnung jeder Punkt, so wird das Dreieck zu sein schien, animierte
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie eine
CAShapeLayer
, aber dann doch nicht tun, etwas sinnvolles mit ihm. Wir korrigieren.Nicht einrichten, Ebenen und Animationen in
-drawRect:
, denn das ist, streng gedacht, als Zeit zu tun, zeichnen mit dem CoreGraphics oder UIKit-APIs. Stattdessen soll der CAShapeLayer zeichnen Sie das Dreieck-so kann man ihn animieren.CAKeyframeAnimation.Pfad ist dazu gedacht, etwas völlig anderes (z.B. das verschieben eines Layers entlang eines Pfades).
Ihre animation ist Animation der
position
Wert der Schicht. Kein Wunder, dass es bewegt sich die Schicht! Sie animieren möchten diepath
Wert statt.Die Idee hinter CAKeyframeAnimation ist, dass Sie es bieten eine Reihe von
values
um den layer, den Besitz. Während der Zeitdauer zwischen den keyframes, wird es interpolieren zwischen zwei benachbarten keyframes. So müssen Sie es mehrere Wege -- eine für jede Seite.Interpolation beliebige Pfade ist schwierig. CA-Pfad-interpolation funktioniert am besten, wenn die Pfade haben die gleiche gleiche Anzahl und Art der Elemente. So stellen wir sicher, dass alle unsere Wege haben die gleiche Struktur, nur mit einige Punkte übereinander.
Das Geheimnis um die animation, und vielleicht mit Computern im Allgemeinen: Sie muss präzise erklären, was Sie wollen passieren. "Ich will animieren, um die Zeichnung zu jedem einzelnen Punkt, so dass es animiert wird angezeigt" ist nicht annähernd genug Informationen.
Hier ist eine UIView-Unterklasse, die ich denke tut, was Sie für Fragen oder zumindest in der Nähe. Zu animieren, Haken ein-Taste, bis die
-animate:
Aktion.SPAnimatedShapeView.h:
SPAnimatedShapeView.m:
strokeEnd
Eigenschaft mit einerCABasicAnimation
von 0 auf 1. Erläuterung und Beispiel-code hier.