Memory leaks CaKeyframeAnimation在解除视图控制器后在后台保持
嗨,我有简单的CAShapeLayer动画Memory leaks CaKeyframeAnimation在解除视图控制器后在后台保持,memory-leaks,repeat,cashapelayer,cakeyframeanimation,Memory Leaks,Repeat,Cashapelayer,Cakeyframeanimation,嗨,我有简单的CAShapeLayer动画 let ballFrameAnimation = CAKeyframeAnimation() aBall.removeFromSuperlayer() self.view.layer.addSublayer(aBall) ballFrameAnimation.keyPath = "position" ballFrameAnimation.duration = 3.0 ballFrameAnimation.calcul
let ballFrameAnimation = CAKeyframeAnimation()
aBall.removeFromSuperlayer()
self.view.layer.addSublayer(aBall)
ballFrameAnimation.keyPath = "position"
ballFrameAnimation.duration = 3.0
ballFrameAnimation.calculationMode = kCAAnimationDiscrete
ballFrameAnimation.fillMode = kCAFillModeForwards
ballFrameAnimation.isRemovedOnCompletion = true
ballFrameAnimation.delegate = self
通过回调来保持重复
func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
let name = anim.value(forKey: "name") as? String
if name == "form" {
attachAnimation()
forwardDirection = !forwardDirection
}
但是,即使我将viewcontroller从堆栈中弹出,这种情况仍会持续并在后台循环(高速)。它还显示了仪器上的内存泄漏
@IBAction func unwindDismiss(_ sender: Any) {
aBall.removeAnimation(forKey: "ballAnimation")
aBall.removeFromSuperlayer()
navigationController?.popToRootViewController(animated:true)
dismiss(animated: true, completion: nil)
}
这很简单
不停循环动画不会通过简单地关闭viewcontroller来释放,因此它会保留在背景中
加入
if navigationController?.topViewController == self {
动画中的循环检查没有停止循环。
这不仅修复了加速的背景循环,还修复了内存泄漏。还有一个警告:当重复使用仪器时:经常关闭并重新启动它们,同时清理构建,否则可能会出现虚假泄漏