美文网首页ios动画
CABasicAnimation 进入后台后再次进入APP时暂停

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

作者: Sweet丶 | 来源:发表于2018-09-06 16:00 被阅读13次

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

    比如下面这段代码用来给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时,动画被移除了。

    相关文章

      网友评论

        本文标题:CABasicAnimation 进入后台后再次进入APP时暂停

        本文链接:https://www.haomeiwen.com/subject/iomybftx.html