首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止CAAnimation以添加另一个CAAnimation

停止CAAnimation以添加另一个CAAnimation
EN

Stack Overflow用户
提问于 2013-07-11 22:40:12
回答 2查看 402关注 0票数 0

我有一个旋转的圆形状,有5个子视图,我正在动画更改它的填充颜色,以匹配当前在顶部的子视图。因此,当我必须改变颜色时,我从该层中删除动画,然后添加新的动画,如下所示:

代码语言:javascript
复制
[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"];

等。

和委托方法:

代码语言:javascript
复制
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
    self.dynamicColorCircleLayer.fillColor = (__bridge CGColorRef)(((CABasicAnimation*)theAnimation).toValue);
}

然而,当一个动画没有结束,而我必须开始另一个动画时,新的动画就会立即结束。举个例子:我正在制作从红色到蓝色的颜色变化动画,我正在制作动画,我必须将颜色变化动画到绿色。动画没有显示,圆圈立即将颜色更改为绿色。如果我从animationDidStop(...)中删除代码,我将使动画变为绿色,但每个动画都将从默认的(红色)颜色开始。

用另一个动画中断动画的正确方法是什么?另外,有没有可能让新动画从我删除旧动画时的颜色开始呢?(在上面的示例中,它将以动画形式将颜色从红色和蓝色之间更改为绿色)

EN

回答 2

Stack Overflow用户

发布于 2013-07-11 22:49:14

请参考以下问题:

Is there a way to pause a CABasicAnimation?

这里的第一个答案解释了如何暂停现有动画,第二个答案说明了如何停止相同的动画。

希望这就是你要找的。

票数 1
EN

Stack Overflow用户

发布于 2013-07-12 17:47:14

我找到了这样做的方法,但是我仍然不知道如何从上一个停止的颜色开始下一个动画。这是它,以防任何人需要它:

代码语言:javascript
复制
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方法中:

代码语言:javascript
复制
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
    if (flag) {
        self.dynamicColorCircleLayer.fillColor = (__bridge CGColorRef)(((CABasicAnimation*)theAnimation).toValue);
    }
}

现在,当颜色变为绿色的动画成功完成或提前中断时,填充颜色将变为绿色,并在需要时开始下一个动画。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17596369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档