4

CALayer我使用以下代码为 a 的内容设置动画:

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)一起闪烁一次,然后隐藏。

我想知道为什么即使我设置removedOnCompletionNO.

4

4 回答 4

5

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

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

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

于 2012-09-26T05:55:50.863 回答
1

我曾经 animation.fillMode = kCAFillModeForwards;解决过这个问题

于 2015-07-31T10:50:53.080 回答
0

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

于 2012-08-27T03:08:29.597 回答
0

斯威夫特 4+5

更新 Jami 对 Swift 4 和 5 的回答

colorAnimation.fillMode = .both
colorAnimation.isRemovedOnCompletion = false
于 2019-09-30T12:57:57.143 回答