我有一个旋转的圆形状,有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(...)中删除代码,我将使动画变为绿色,但每个动画都将从默认的(红色)颜色开始。
用另一个动画中断动画的正确方法是什么?另外,有没有可能让新动画从我删除旧动画时的颜色开始呢?(在上面的示例中,它将以动画形式将颜色从红色和蓝色之间更改为绿色)
发布于 2013-07-11 22:49:14
发布于 2013-07-12 17:47:14
我找到了这样做的方法,但是我仍然不知道如何从上一个停止的颜色开始下一个动画。这是它,以防任何人需要它:
CABasicAnimation *currentAnimation = (CABasicAnimation*)[self.dynamicColorCircleLayer animationForKey:@"fillColor"];
if (currentAnimation != nil) {
self.dynamicColorCircleLayer.fillColor = (__bridge CGColorRef)(currentAnimation.toValue);
}
switch (index) {
case 0: {
CABasicAnimation *fillColorAnimation = [CABasicAnimation animationWithKeyPath:@"fillColor"];
fillColorAnimation.duration = 2.5f;
fillColorAnimation.toValue = (id)[[UIColor redColor] CGColor];
fillColorAnimation.removedOnCompletion = NO;
fillColorAnimation.fillMode = kCAFillModeForwards;
fillColorAnimation.delegate = self;
[self.dynamicColorCircleLayer addAnimation:fillColorAnimation forKey:@"fillColor"];
break;
} (...)在delegate方法中:
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
if (flag) {
self.dynamicColorCircleLayer.fillColor = (__bridge CGColorRef)(((CABasicAnimation*)theAnimation).toValue);
}
}现在,当颜色变为绿色的动画成功完成或提前中断时,填充颜色将变为绿色,并在需要时开始下一个动画。
https://stackoverflow.com/questions/17596369
复制相似问题