2012-11-11 20 views
6

Ich animiere die Zeichnung eines Grundkreises. Dies funktioniert einwandfrei, außer dass die Animation an der 3-Uhr-Position beginnt. Weiß jemand wie ich es um 12 Uhr starten kann?CABasicAnimation - Einstellen der Starthubposition

self.circle = [CAShapeLayer layer]; 
self.circle.fillColor = nil; 
self.circle.lineWidth = 7; 
self.circle.strokeColor = [UIColor blackColor].CGColor; 
self.circle.bounds = CGRectMake(0, 0, 200, 200); 
self.circle.path = [UIBezierPath bezierPathWithOvalInRect:self.circle.bounds].CGPath; 
[self.view.layer addSublayer:self.circle]; 

CABasicAnimation *drawAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"]; 
drawAnimation.duration   = 5.0; 
drawAnimation.repeatCount   = 1.0; 
drawAnimation.removedOnCompletion = NO; 
drawAnimation.fromValue = [NSNumber numberWithFloat:0.0f]; 
drawAnimation.toValue = [NSNumber numberWithFloat:1.0f]; 
drawAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; 
[self.circle addAnimation:drawAnimation forKey:@"drawCircleAnimation"]; 

Antwort

13

können Sie bezierPathWithArcCenter statt bezierPathWithOvalInRect verwenden, denn das ist ein Start- und Endwinkel angeben können:

CGFloat radius = self.circle.bounds.size.width/2; // Assuming that width == height 
self.circle.path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(radius, radius) 
                radius:radius 
               startAngle:(-M_PI/2) 
               endAngle:(3*M_PI/2) 
               clockwise:YES].CGPath; 

die bezierPathWithArcCenter Dokumentation für die Bedeutung der Winkel sehen.

+0

Ich hatte das gleiche Problem und es funktioniert super! – carantes