CABasicAnimation 进入后台后再次进入APP时暂停了

比如下面这段动画

 CABasicAnimation *musicAnimation = [CABasicAnimation animationWithKeyPath:@"position.y"];
        musicAnimation.duration = 0.35;
        musicAnimation.fromValue = @(30);
    //    musicAnimation.toValue = @(tLayer.frame.size.height - 10);
        musicAnimation.byValue = @(13);
        musicAnimation.autoreverses = YES;
        musicAnimation.repeatCount = MAXFLOAT;
        musicAnimation.removedOnCompletion = NO;
        [tLayer addAnimation:musicAnimation forKey:@"musicAnimation"];

在按下home键进入后台,再次打开时,动画暂停了,停止在初始的位置。监听系统的UIApplicationDidBecomeActiveNotification ,在通知回调的方法里面打印信息可以推理动画CABasicAnimation已经被移除了

 [tLayer animationForKey:@"transform.rotation.z"] -> (null) // 获取到的值为null

查找CABasicAnimation及其父类对象中有对动画移除相关的的属性,定位到其中的属性removedOnCompletion,默认为YES,将这个属性设置为NO后运行,问题就解决了。

animation.removedOnCompletion = NO;

// 显然这比网上的做法:监听UIApplicationDidBecomeActiveNotification在通知里面重新开始动画简单多了
由此可知是程序进入后台之后,动画被认为是Completion了,而这个属性的值为YES时,动画被移除了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容