【问题标题】:CABasicAnimation stop animation on completion - iOSCABasicAnimation 完成时停止动画 - iOS
【发布时间】:2015-07-08 20:27:56
【问题描述】:

我有一个 iOS 应用程序正在重复使用 CABasicAnimation

    CABasicAnimation *fadeAnim = [CABasicAnimation animationWithKeyPath:@"opacity"];
    fadeAnim.fromValue = [NSNumber numberWithFloat:1.0];
    fadeAnim.toValue = [NSNumber numberWithFloat:0.2];
    fadeAnim.duration = 1.0;
    fadeAnim.autoreverses = YES;
    fadeAnim.repeatCount = INFINITY;
    [colourbutton.titleLabel.layer addAnimation:fadeAnim forKey:@"opacity"];

我有一个按钮,按下它可以停止动画。

-(IBAction)stopAnim {
    [colourbutton.titleLabel.layer removeAllAnimations];
}

它工作正常,但我注意到的一件事是突然停止动画,它不会让动画完成。那么我怎样才能让它完成当前的动画然后停止。 (或者换句话说,我怎样才能把它送到removeAllAnimations....withAnimation?)。

附带说明,我是否需要包含CoreAnimation 框架才能使其正常工作。到目前为止,动画正在运行,我还没有导入 CoreAnimation 框架。

谢谢,丹。

【问题讨论】:

    标签: ios objective-c core-animation uiviewanimation cabasicanimation


    【解决方案1】:

    只需添加另一个动画,然后像这样删除第一个动画:

        CABasicAnimation *endAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
        endAnimation.fromValue = @(((CALayer *)colourbutton.titleLabel.layer.presentationLayer).opacity);
        endAnimation.toValue = @(1);
        endAnimation.duration = 1.0;
        [colourbutton.titleLabel.layer addAnimation:endAnimation forKey:@"end"];
        [colourbutton.titleLabel.layer removeAnimationForKey:@"opacity"];
    

    这里的关键是使用表示层来获取当前状态。不要忘记设置图层的实际结束状态,因为动画将在完成时被移除。

    【讨论】:

    • 但我使用的是“autoreverses”属性。添加另一个动画看起来很傻不是吗?
    • @Supertecnoboff 你试过了吗?第二个动画将添加到倒车动画之上。并且反转一个将立即被删除,因此用户不会注意到任何事情。
    • @Supertecnoboff 那么,您尝试过解决方案吗?我已经用过几次了——按预期工作。
    • 是的,非常感谢! (对不起,我花了这么长时间才接受它)。
    【解决方案2】:

    在 NKorotov 的回答中,他使用 presentationLayer 找出您在动画中的位置。这是正确的方法。

    您可以使用此解决方案,尽管 IMO 您还必须正确计算动画持续时间(基于原始动画的持续时间以及您当前沿动画路径的距离)。

    如果您觉得添加新动画“愚蠢”,您或许可以在正确的时间使用dispatch_after 调用removeAllAnimations

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 2013-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多