【问题标题】:CAAnimation, snapping backCAAnimation,回弹
【发布时间】:2012-03-09 00:42:02
【问题描述】:

我正在尝试使用 CAAnimation,并且像许多新人一样在做 CAAnimation;完成后,图层将恢复到其原始状态。

关于如何解决这个问题的问题在这里问了几次,答案是将以下代码添加到您的 CAAnimation 中。

animation.removedOnCompletion = NO;

虽然这可行,但根据 Apple 的 WWDC 视频讨论 CAAnimation,推荐的解决方案是:

// animating opacity
layer.opacity = newOpacityValue;
[layer addAnimation:animation forKey:@"opacity"];

所以我很想知道这两者之间的主要区别是什么以及何时使用它们?

【问题讨论】:

标签: ios calayer caanimation


【解决方案1】:

显式动画实际上并不修改 CALayer 的属性。

他们只是修改了presentationLayer,这是你实际看到的。动画完成后,您将看到与动画之前完全相同的 CALayer。

通过这样设置值

// animating opacity
layer.opacity = newOpacityValue;
[layer addAnimation:animation forKey:@"opacity"];

您确保动画值存储在模型中,因此即使从图层中移除动画,您的更改也会继续存在。

使用 removedOnCompletion = YES 不是一个持久的解决方案。每当您从图层中删除动画时,它都会恢复到旧状态。

【讨论】:

    【解决方案2】:

    您不需要“removedOnCompletion”标志。

    您需要在动画之外将不透明度设置为新值 - 作为您的第二个示例。

    使用“removedOnCompletion”不会释放您的动画对象 - 如果您有很多动画,会炸毁您的内存。

    CABasicAnimation *animation=[CABasicAnimation animationWithKeyPath:@"opacity"];
    animation.fromValue=[NSNumber numberWithFloat:0];
    animation.toValue=[NSNumber numberWithFloat:1];
    
    layer.opacity=1; // this line will make sure the opacity will stay 1 when the animation is completed
    [layer addAnimation:animation forKey:@"opacity"];
    

    【讨论】:

    • 等一下,当我这样做时,该属性立即变为 1 并且没有动画。我错过了什么吗?
    • @jab,需要添加动画时长(animation.duration=3;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多