Ios 如何通过自定义渐变更改strokeColor

Ios 如何通过自定义渐变更改strokeColor,ios,objective-c,core-animation,cabasicanimation,cashapelayer,Ios,Objective C,Core Animation,Cabasicanimation,Cashapelayer,我想为CAShapeLayer的strokeColor设置动画,但在CABasicAnimation中,我有两个值(from和to)。当动画为fire时,是否仅支持两种颜色?例如,在开始时,我有strokeColor=[UIColor blueColor].CGColor 然后 在中途我有一个深紫色,但我需要,例如,黄色 是否可以将自定义渐变添加到CABASICANIATION?我认为您不能使用CABASICANIATION,但您可以使用设置动画的中间值: CAKeyframeAnimation

我想为CAShapeLayer的strokeColor设置动画,但在CABasicAnimation中,我有两个值(from和to)。当动画为fire时,是否仅支持两种颜色?例如,在开始时,我有
strokeColor=[UIColor blueColor].CGColor
然后

在中途我有一个深紫色,但我需要,例如,黄色


是否可以将自定义渐变添加到CABASICANIATION?

我认为您不能使用
CABASICANIATION
,但您可以使用设置动画的中间值:

CAKeyframeAnimation *colorAnimation = [CAKeyframeAnimation animationWithKeyPath:@"strokeColor"];
colorAnimation.values               = @[(id)[[UIColor blueColor] CGColor],
                                        (id)[[UIColor yellowColor] CGColor],
                                        (id)[[UIColor redColor] CGColor]];
colorAnimation.duration             = 3.0;  // "animate over 3 seconds or so.."
colorAnimation.repeatCount          = 1.0;  // Animate only once..
colorAnimation.removedOnCompletion  = NO;   // Remain stroked after the animation..
colorAnimation.fillMode             = kCAFillModeForwards;
colorAnimation.timingFunction       = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
如果你想要一种“跨光谱”的感觉,你可以:

colorAnimation.values = @[(id)[[UIColor blueColor] CGColor],
                          (id)[[UIColor greenColor] CGColor],
                          (id)[[UIColor yellowColor] CGColor],
                          (id)[[UIColor orangeColor] CGColor],
                          (id)[[UIColor redColor] CGColor]];
colorAnimation.values = @[(id)[[UIColor blueColor] CGColor],
                          (id)[[UIColor colorWithRed:0.9 green:0.0 blue:0.9 alpha:1.0] CGColor],
                          (id)[[UIColor redColor] CGColor]];
或者,如果你想要更简单的蓝色到红色,但要避免真正的深紫色,你可以:

colorAnimation.values = @[(id)[[UIColor blueColor] CGColor],
                          (id)[[UIColor greenColor] CGColor],
                          (id)[[UIColor yellowColor] CGColor],
                          (id)[[UIColor orangeColor] CGColor],
                          (id)[[UIColor redColor] CGColor]];
colorAnimation.values = @[(id)[[UIColor blueColor] CGColor],
                          (id)[[UIColor colorWithRed:0.9 green:0.0 blue:0.9 alpha:1.0] CGColor],
                          (id)[[UIColor redColor] CGColor]];

有很多选择。

@RostK。显然,这为我们提供了很多选择。用另外两个例子更新了我的答案。