CAKeyframeAnimation : 停止时内容变回第一张图片

Posted

技术标签:

【中文标题】CAKeyframeAnimation : 停止时内容变回第一张图片【英文标题】:CAKeyframeAnimation : contents change back to first image when stopped 【发布时间】:2012-08-22 11:47:28 【问题描述】:

我使用以下代码为CALayer 的内容制作动画:

CAKeyframeAnimation *countanimation = [CAKeyframeAnimation animation];
NSArray *images = [NSArray arrayWithObjects:(id)[UIImage imageNamed:@"number3"].CGImage, 
                        (id)[UIImage imageNamed:@"number2"].CGImage, 
                        (id)[UIImage imageNamed:@"number1"].CGImage, nil];
[countanimation setKeyPath:@"contents"];
[countanimation setValues:images];
[countanimation setCalculationMode:kCAAnimationDiscrete];
[countanimation setDuration:3.0f];
[countanimation setDelegate:self];
[countanimation setAutoreverses:NO];
[countanimation setRemovedOnCompletion:NO];
[countanimation setValue:@"Countdown" forKey:@"name"];
[countDown addAnimation:countanimation forKey:nil];

并且想在动画停止时隐藏图层:

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag

    if([[anim valueForKey:@"name"] isEqual:@"Countdown"])
    
        [countDown setHidden:YES];
        ...
    

问题是该层与原始图像(编号3)一起闪烁一次,然后隐藏。

我想知道为什么即使我将removedOnCompletion 设置为NO,图层也会变回原来的状态。

【问题讨论】:

【参考方案1】:

您可以将FillMode 属性与removedOnCompletion 属性结合使用,在repeatCount 结束后将第一帧设置回其内容。

[countanimation setFillMode:kCAFillModeBoth];
[countanimation setRemovedOnCompletion:NO];

我认为这两行代码可以帮助你得到所需的结果。

【讨论】:

我刚刚发现,如果您使用的是 CAAnimationGroup,这些设置需要在组中,而不是单个动画,以防万一来这里的人有所帮助【参考方案2】:

我使用animation.fillMode = kCAFillModeForwards; 解决了这个问题

【讨论】:

【参考方案3】:

我把原图换成number1,问题就解决了。

【讨论】:

【参考方案4】:

斯威夫特 4+5

更新 Jami 对 Swift 4 和 5 的回答

colorAnimation.fillMode = .both
colorAnimation.isRemovedOnCompletion = false

【讨论】:

以上是关于CAKeyframeAnimation : 停止时内容变回第一张图片的主要内容,如果未能解决你的问题,请参考以下文章

CAKeyframeAnimation 完成时如何指定选择器?

在动画集结束时在 MonoTouch 中实现 CAKeyFrameAnimation 回调?

CAAnimationGroup 与 CAKeyframeAnimation 和 CABasicAnimation

具有交错开始时间的 CAKeyframeAnimation

1.0 秒后的 CAKeyframeAnimation 关键时间未执行

CAKeyframeAnimation 和音频同步