用CABasicAnimation动画Circle的endAngle

时间:2012-10-08 18:42:59

标签: iphone ios core-animation cabasicanimation

我有一些UIView使用drawrect代码绘制饼图:

    - (void)drawRect:(CGRect)rect
    {
        CGRect parentViewBounds = self.bounds;
        CGFloat x = CGRectGetWidth(parentViewBounds)/2;
        CGFloat y = CGRectGetHeight(parentViewBounds)/2;

        // Get the graphics context and clear it
        CGContextRef ctx = UIGraphicsGetCurrentContext();
        CGContextClearRect(ctx, rect);


        // define line width
        CGContextSetLineWidth(ctx, 4.0);


        CGContextSetFillColor(ctx, CGColorGetComponents( [someColor CGColor]));
        CGContextMoveToPoint(ctx, x, y);
        CGContextAddArc(ctx, x, y, 100,  radians(270), radians(270), 0); // 27
        CGContextClosePath(ctx);
        CGContextFillPath(ctx);
}

但是当我尝试在绘制后设置“endAngle”属性动画时,它不起作用:

CABasicAnimation *theAnimation;
theAnimation=[CABasicAnimation animationWithKeyPath:@"endAngle"];
theAnimation.duration=1;
theAnimation.repeatCount=1;
theAnimation.autoreverses=NO;
theAnimation.fromValue=[NSNumber numberWithFloat:270];
theAnimation.toValue=[NSNumber numberWithFloat:60];
[[self.layer presentationLayer] addAnimation:theAnimation forKey:@"animateLayer"];

我在哪里弄错了?

2 个答案:

答案 0 :(得分:2)

如果您想制作动画,那么您应该考虑使用Core Animation作为绘图。它使动画更加简单。

看看this great tutorial on making a custom animatable pie chart with Core Animation。我相信你可以修改它以获得你想要的东西。

如果您看起来很复杂,那么您可以查看my answer"Draw part of a circle",它通过制作一个非常宽的圆形笔画来绘制饼图形状。

答案 1 :(得分:1)

有几件事。您无法使用CAAnimation为您在drawRect方法中执行的绘制设置动画。

其次,如果您确实使用了CAShapeLayer,则可以对图层中安装的路径进行动画更改,但是您需要确保该路径具有与动画中所有步骤相同的控制点数量和类型。

CGPath弧命令使用不同数量的控制点来绘制不同的角度。因此,您无法更改弧的角度并为其设置动画。

您需要做的是安装一条弧的全长路径,然后为形状图层的strokeStart和/或strokeEnd属性设置动画。这些属性导致路径从图形中省略路径的第一部分/最后部分。我敢说大卫在可动画饼图上链接的教程使用了这种技术。