【问题标题】:CALayer CABasicAnimation chainingCALayer CABasic动画链接
【发布时间】:2013-05-12 20:57:18
【问题描述】:

我正在使用以下代码为 CALayer 的不透明度属性设置动画:

在方法中创建动画:

+ (CABasicAnimation *)fadeIn:(float)begin duration:(float)duration remove:(BOOL)remove{

    CABasicAnimation *fadeAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
    fadeAnimation.fromValue = [NSNumber numberWithFloat:0.0];
    fadeAnimation.toValue = [NSNumber numberWithFloat:1.0];
    fadeAnimation.additive = NO;
    fadeAnimation.removedOnCompletion = remove;
    fadeAnimation.beginTime = begin;
    fadeAnimation.duration = duration;
    fadeAnimation.fillMode = kCAFillModeBoth;

    return fadeAnimation;
}

将动画添加到图层:

[overlayLayer addAnimation:[VideoComposerHelpers fadeIn:1.0 duration:0.5 remove:NO] forKey:nil];

这是完美的工作。但是,现在我想在第一个动画完成后向同一层添加另一个动画。

[overlayLayer addAnimation:[VideoComposerHelpers fadeOut:1.5 duration:0.5 remove:NO] forKey:nil]; // fadeOut is a method similar to fadeIn

应该发生的是,图层以 0.5 的持续时间淡入,然后立即以 0.5 的持续时间淡出。 不过,这似乎不起作用。是不是因为第二个动画的起点和第一个动画的终点是一样的?

【问题讨论】:

    标签: ios calayer cabasicanimation


    【解决方案1】:

    CABasicAnimation 可以有一个委托。代表将被发送到animationDidStop:finished:。现在您可以请求链中的下一个动画。

    不过,在你的情况下,你甚至不需要那个;只需使用 autoreverses 为 YES 的动画即可。

    (哦,请不要removedOnCompletionfillMode 混淆;这是错误的,使用它们的示例同样错误。它们仅在中间复杂的分组动画中需要。 )

    【讨论】:

    • 这里是我书中关于CABasicAnimation的部分,下一部分告诉你如何正确使用它:apeth.com/iOSBook/…
    • 不知道这是否真的是我想要的。目标实际上是在一段时间内多次添加此淡入/淡出。不过,我可以将提示点作为动画添加到图层,但情况似乎并非如此
    【解决方案2】:

    您应该使用类似这样的CAAnimationGroup

    CABasicAnimation *fadeIn  = [VideoComposerHelpers fadeIn:1.0 duration:0.5 remove:NO];
    CABasicAnimation *fadeOut = [VideoComposerHelpers fadeOut:1.5 duration:0.5 remove:NO];
    
    CAAnimationGroup *group = [CAAnimationGroup animation];
    group.fillMode = kCAFillModeForwards;
    group.removedOnCompletion = NO;
    [group setAnimations:[NSArray arrayWithObjects:fadeIn, fadeOut, nil]];
    group.duration = 2;
    [overlayLayer addAnimation:group forKey:@"savingAnimation"];
    

    我也不确定我是否得到了正确的动画开始、结束、持续时间的值(你应该检查它们):))。

    【讨论】:

    • 很高兴我能帮上忙,我希望投票反对的人提出这个论点,也许我的回答有问题(无论如何我只是复制粘贴一段我正在运行的代码,然后我调整了以满足您的需求)所以基本上它应该是一个很好的答案:))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 2014-04-15
    相关资源
    最近更新 更多