我在UIView的子类中有一些CALayer
动画,它们根据第一次绘制时的当前时间以某个角度开始。问题是,当应用程序从待机状态恢复时,动画将在最后一个位置恢复。是否有可能检测到这一点并以某种方式告诉UIView的draw(_:)
方法重置所有图层和动画并使用新参数再次绘制所有内容?
答案 0 :(得分:2)
您当然可以在应用委托代理removeAllAnimations()
方法的图层上调用applicationDidBecomeActive(_:)
来删除所有动画。
(实际上让您的视图控制器注册UIApplicationDidBecomeActive
通知可能更干净。这样您就不必费心让您的应用代表担心通知前视图控制器它应该删除动画。)
该代码可能如下所示:
NotificationCenter.default.addObserver(self,
selector: #selector(yourSelector(_:)),
name: .UIApplicationDidBecomeActive, object: nil)
如果您尚未更改底层属性,那么您将动画移除动画并将图层及其子图层恢复到动画前状态。 (CALayer
动画实际上并没有改变它动画的图层。它会创建一个"表示层"绘制动画,除非你设置isRemovedOnCompletion=true
在您的CAAnimation
上,一旦动画完成,图层就会被删除,图层会恢复到它的开始状态。为它设置图层属性非常常见#&# 39;在提交动画之前的结束状态,以便动画完成后,底层将保持与动画结束时相同的状态。)
如果您 更改了您正在设置动画的属性/属性,那么您需要保存其初始状态并将其重置为applicationDidBecomeActive(_:)
方法中的状态。
答案 1 :(得分:0)
您可以使用removeAllAnimations()