【问题标题】:CAKeyframeAnimation : contents change back to first image when stoppedCAKeyframeAnimation : 停止时内容变回第一张图片
【发布时间】: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,图层也会变回原来的状态。

【问题讨论】:

    标签: ios quartz-graphics caanimation cakeyframeanimation


    【解决方案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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-25
          • 2013-03-31
          • 1970-01-01
          相关资源
          最近更新 更多