重置Calayer图纸 /动画



我在uiview的子类内有一些CALayer动画,该动画根据当前时间首次绘制时以一定角度开始。问题是,当应用程序从备用中返回时,动画将仅在最后一个位置恢复。是否可以检测到这一点,并以某种方式告诉UIVIEW的draw(_:)方法以重置所有层和动画,并使用新参数再次绘制所有内容?

您当然可以在应用程序委托applicationDidBecomeActive(_:)方法中拨打removeAllAnimations()以删除所有动画。

(实际上,将视图控制器寄存在UIApplicationDidBecomeActive通知中可能更干净。这样,您就不必为了让您的应用程序委派担心前视图控制器应该删除动画而感到困难。(

(

该代码可能看起来像这样:

NotificationCenter.default.addObserver(self, 
  selector: #selector(yourSelector(_:)), 
  name: .UIApplicationDidBecomeActive, object: nil)

如果您还没有更改正在动画的基础属性,则将删除动画并恢复您的图层,并将其恢复到其前动画状态。(CALayer动画实际上并未更改其动画的图层。它会创建一个绘制动画的"演示层",除非您在CAAnimation上设置isRemovedOnCompletion=true,否则将删除演示层,一旦动画完成,并且该图层恢复为它是开始状态。在提交动画之前将图层的属性设置为结束状态很常见P>

如果您更改了要动画的属性/属性,则您需要保存其起始状态并将其重置为applicationDidBecomeActive(_:)方法。

您可以使用removeAllAnimations()

这是链接

swift 5

在您要完全删除图层的情况下,它是唯一添加的层,那么此安全的一点点代码将完全删除它。

self.layer.removeAllAnimations()
if let myLayer = self.layer.sublayers?.first {        
    myLayer.removeFromSuperlayer()
}

最新更新