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

知道问题的原因之后就能用最简单的方式解决!

比如下面这段代码用来给imgV来设置转圈动画

 CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
//        animation.delegate = self;
        // 1秒后执行
        animation.beginTime = CACurrentMediaTime() + .25;
        // 持续时间
        animation.duration = 2.5;
        // 重复次数
        animation.repeatCount = MAXFLOAT;
        // 起始角度
        animation.fromValue = @(0.0);
        // 终止角度
        animation.toValue = @(2 * M_PI);
        // 添加动画
        [imgV.layer addAnimation:animation forKey:@"rotate"];

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

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

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

animation.removedOnCompletion = NO;
// 显然这比网上的做法:监听UIApplicationDidBecomeActiveNotification在通知里面重新开始动画简单多了

由此可知是程序进入后台之后,动画被认为是Completion了,而这个属性的值为YES时,动画被移除了。

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

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌。在这里你可以看...
    F麦子阅读 10,533评论 5 13
  • 在iOS实际开发中常用的动画无非是以下四种:UIView动画,核心动画,帧动画,自定义转场动画。 1.UIView...
    请叫我周小帅阅读 8,381评论 1 23
  • 在iOS实际开发中常用的动画无非是以下四种:UIView动画,核心动画,帧动画,自定义转场动画。下面我们逐个介绍。...
    4b5cb36a2ee2阅读 2,924评论 0 0
  • 1 CALayer IOS SDK详解之CALayer(一) http://doc.okbase.net/Hell...
    Kevin_Junbaozi阅读 10,596评论 3 23
  • 如果想让事情变得顺利,只有靠自己--夏尔·纪尧姆 上一章介绍了隐式动画的概念。隐式动画是在iOS平台创建动态用户界...
    夜空下最亮的亮点阅读 6,081评论 0 1