使用CABasicAnimation动画CAShapeLayer的strokeColor

时间:2012-08-25 14:01:27

标签: objective-c ios core-animation cashapelayer

我使用this previous主题的答案在CAShapeLayer上动画闪烁笔画是不成功的,经过多次搜索,我找不到使用{{1}设置动画动画的其他示例}。

我想要做的是在两种颜色之间使用CABasicAnimation脉冲的笔划。使用CAShapeLayer进行不透明效果很好,但CABasicAnimation使我望而却步,我对如何成功实施的建议表示感谢。

[CABasicAnimation animationWithKeyPath:@"strokeColor"]

取消注释不透明度动画会导致预期的不透明度淡化。笔画动画不起作用。隐式strokeColor按预期更改动画,但我想记录确认strokeColor可以使用CABasicAnimation显式动画。

更新:具体问题是shapeLayer.path为NULL。纠正这个问题。

1 个答案:

答案 0 :(得分:7)

以下代码对我很有用。 shapeLayer笔划路径的lineWidth是多少?这可能是问题吗?

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIBezierPath * circle = [UIBezierPath bezierPathWithOvalInRect:self.view.bounds];

    CAShapeLayer * shapeLayer = [CAShapeLayer layer];
    shapeLayer.path = circle.CGPath;
    shapeLayer.strokeColor =[UIColor blueColor].CGColor;
    [shapeLayer setLineWidth:15.0];

    [self.view.layer addSublayer:shapeLayer];

    CABasicAnimation *strokeAnim = [CABasicAnimation animationWithKeyPath:@"strokeColor"];
    strokeAnim.fromValue         = (id) [UIColor redColor].CGColor;
    strokeAnim.toValue           = (id) [UIColor greenColor].CGColor;
    strokeAnim.duration          = 3.0;
    strokeAnim.repeatCount       = 0;
    strokeAnim.autoreverses      = YES;
    [shapeLayer addAnimation:strokeAnim forKey:@"animateStrokeColor"];

}

让我知道它是否适合你...