1

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

是否有 KVO,strokeColor因为我正在让它为backgroundColorof 层工作。

我在 XCode 4.6 上运行 iOS SDK 6.1

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

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);
4

2 回答 2

0

在研究了同样的问题后,我发现这strokeColor不是CALayer. 我认为这与 CALayer 渲染到缓存位图有关。

解决方案是使用CAShapeLayerstrokeColor 动画化的地方。

于 2013-10-19T13:57:48.107 回答
0

tl;博士; 你可能是说@"borderColor"


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

您可以使用 CAShapeLayer,但您不应该仅仅为了中风而这样做,因为 CALayer 具有borderColor您可能正在寻找的属性。

所以我的建议是改为动画borderColor


与您的问题无关:

从您发布的代码看来,您正在视图drawRect:实现中添加动画。此方法仅应用于实际绘图,我强烈建议您将动画代码移至其他位置。每次您的视图重绘自身时都会调用此方法,这对于添加新动画来说可能过于频繁。

于 2013-10-19T14:11:58.677 回答