我有一个带有 5 个子视图的旋转圆形,我正在对其填充颜色进行动画更改以匹配当前位于顶部的子视图。因此,当我必须更改颜色时,我会从该图层中删除动画,然后像这样添加新的:
[self.dynamicColorCircleLayer removeAllAnimations]; //checked - doesn't matter if line is added or not
switch (index) {
case 0: {
CABasicAnimation *fillColorAnimation = [CABasicAnimation animationWithKeyPath:@"fillColor"];
fillColorAnimation.duration = 2;
//fillColorAnimation.fromValue = (id)self.dynamicColorCircleLayer.fillColor;
fillColorAnimation.toValue = (id)[[UIColor redColor] CGColor];
fillColorAnimation.removedOnCompletion = NO;
fillColorAnimation.fillMode = kCAFillModeForwards;
fillColorAnimation.delegate = self;
[self.dynamicColorCircleLayer addAnimation:fillColorAnimation forKey:@"fillColor"];
等等
和委托方法:
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
self.dynamicColorCircleLayer.fillColor = (__bridge CGColorRef)(((CABasicAnimation*)theAnimation).toValue);
}
但是,当一个动画尚未结束而我必须开始另一个动画时,新的动画会立即结束。例如:我正在将颜色从红色变为蓝色,我在动画中间,我必须将颜色变为绿色。动画没有显示,圆圈只是立即将颜色变为绿色。如果我从 animationDidStop(...) 中删除代码,我会得到一个绿色的动画,但每个动画都将从默认(红色)颜色开始。
用另一个动画打断动画的正确方法是什么?另外,是否有可能使新动画从我删除旧动画时的颜色开始?(在上面的示例中,它将动画颜色从红色和蓝色之间的颜色变为绿色)