无法为CALayer strokeColor设置动画

时间:2013-04-18 09:02:32

标签: ios calayer

我一直在尝试绘制一个简单的矩形并为边缘颜色设置动画。我尝试使用following链接,但仍然没有帮助。我最后通过改变图层的边框颜色和动画来修复它。这很好。

strokeColor是否有KVO,因为我正在为backgroundColor图层工作。

我正在使用运行iOS SDK 6.1的XCode 4.6

这就是我一直在做的事情:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);

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;
[self.layer addAnimation:strokeAnim forKey:@"animateStrokeColor"];

CGContextMoveToPoint(context, 0, 0);
CGContextAddLineToPoint(context, squareLength, 0);
CGContextAddLineToPoint(context, squareLength, squareLength);
CGContextAddLineToPoint(context, 0, squareLength);
CGContextAddLineToPoint(context, 0, 0);
CGContextStrokePath(context);

2 个答案:

答案 0 :(得分:0)

在研究了同样的问题之后,我发现strokeColor不是CALayer上的可动画属性。我认为这与CALayer被渲染到缓存的位图有关。

解决方案是使用CAShapeLayer,而strokeColor 可设置动画。

答案 1 :(得分:0)

tl; dr; 您可能意味着@"borderColor"


除非您在视图中覆盖了+ (Class)layerClass(我怀疑您这样做了),否则您的视图层将成为CALayer实例,该实例没有strokeColor属性。

你可以使用CAShapeLayer,但是你不应该只针对笔划这样做,因为CALayer具有borderColor属性,这可能就是你想要的。

所以我的建议是设置borderColor的动画。


与您的问题没有关系:

从您发布的代码看起来,您在视图drawRect:实现中添加了动画。此方法仅应用于实际绘图,我强烈建议您将动画代码移动到其他位置。每次您的视图重绘自己时都会调用此方法,并且这种方法可能经常用于添加新动画。