2012-11-11 6 views
6

Sto animando il disegno di un cerchio di base. Funziona bene, eccetto che l'animazione inizia a disegnare alle 3 in punto. Qualcuno sa come posso farlo partire alle 12?CABasicAnimazione - Impostazione della posizione del tratto iniziale

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"]; 

risposta

13

È possibile utilizzare al posto di bezierPathWithArcCenterbezierPathWithOvalInRect, perché questo permette di specificare un angolo di inizio e di fine:

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; 

Vedere la documentazione bezierPathWithArcCenter per il significato degli angoli.

+0

Ho avuto lo stesso problema e funziona benissimo! – carantes