7

基本的な円の描画をアニメーション化しています。これは、アニメーションが3時の位置から描画を開始することを除いて、正常に機能します。どうすれば12時に開始できるか知っている人はいますか?

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

1 に答える 1

16

bezierPathWithArcCenterの代わりにを使用できbezierPathWithOvalInRectます。これにより、開始角度と終了角度を指定できます。

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;

角度の意味については、 bezierPathWithArcCenterのドキュメントを参照してください。

于 2012-11-11T17:19:11.330 に答える