CABasicAnimation 在它开始之前就停止了吗?

Posted

技术标签:

【中文标题】CABasicAnimation 在它开始之前就停止了吗?【英文标题】:CABasicAnimation stopping before it started? 【发布时间】:2011-09-16 08:01:54 【问题描述】:

我需要淡入我的 CALayers。这是我的代码:

    for(int i = 0; i < viewArray.count; i++)
    
        CABasicAnimation *fadeIn = [CABasicAnimation animationWithKeyPath:@"opacity"];
        fadeIn.duration = 0.3;
        fadeIn.beginTime = i;
        fadeIn.fromValue = [NSNumber numberWithFloat:0.0];
        fadeIn.toValue = [NSNumber numberWithFloat:0.8];
        fadeIn.removedOnCompletion = NO;
        fadeIn.delegate = self;
        [((CALayer*)[viewArray objectAtIndex:i]) addAnimation:fadeIn forKey:nil];
    

但是,只有前两个对象正确淡化,所有其他对象根本不淡化。我注意到,当我在 animationDidStop 处设置断点时,大多数尚未开始的动画已经停止(即使是应该在 60 秒内开始的动画也会在前几秒内停止)。我不确定发生了什么。当我手动将每个 CALayer 的不透明度设置为 1 时,我可以正确看到它,但在制作动画时却看不到。

【问题讨论】:

您要为多少个对象设置动画? 【参考方案1】:

您正在同时启动所有动画,因为对addAnimation:forKey: 的调用不会同步等待动画完成。

我已经检查过了,看来您必须按以下方式设置 beginTime

fadeIn.beginTime = CACurrentMediaTime() + i;

【讨论】:

工作!虽然我得到了一些奇怪的动画,但至少它确实延迟了它。谢谢! 您是否要同时执行所有动画?还是一个接一个? 两者都不是。每次开始淡入淡出之间只有一小段延迟。 @Ninja 我也有动画之间奇怪的时间偏移。我通过为每个动画设置.beginTime = CACurrentMediaTime() + i; 解决了这个问题。

以上是关于CABasicAnimation 在它开始之前就停止了吗?的主要内容,如果未能解决你的问题,请参考以下文章

在特定点停止 CABasicAnimation

Swift - CABasicAnimation 完成时更新 UIButton

如何在 CABasicAnimation 结束之前重置它?

图像序列在它出现之前开始动画

如何正确设置 CABasicAnimation(开始)时间?

CABasicAnimation 从当前图层位置开始