比如下面這段動畫
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鍵進入后臺,再次打開時,動畫暫停了,停止在初始的位置。監(jiān)聽系統(tǒng)的UIApplicationDidBecomeActiveNotification ,在通知回調的方法里面打印信息可以推理動畫CABasicAnimation已經被移除了
[tLayer animationForKey:@"transform.rotation.z"] -> (null) // 獲取到的值為null
查找CABasicAnimation及其父類對象中有對動畫移除相關的的屬性,定位到其中的屬性removedOnCompletion,默認為YES,將這個屬性設置為NO后運行,問題就解決了。
animation.removedOnCompletion = NO;
// 顯然這比網(wǎng)上的做法:監(jiān)聽UIApplicationDidBecomeActiveNotification在通知里面重新開始動畫簡單多了
由此可知是程序進入后臺之后,動畫被認為是Completion了,而這個屬性的值為YES時,動畫被移除了。