您好我有简单的CAShapeLayer动画
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
}
然而,即使我将视图控制器从堆栈中弹出,它仍会在后台(高速)持续存在并循环。它还显示了仪器上的内存泄漏。
@IBAction func unwindDismiss(_ sender: Any) {
aBall.removeAnimation(forKey: "ballAnimation")
aBall.removeFromSuperlayer()
navigationController?.popToRootViewController(animated:true)
dismiss(animated: true, completion: nil)
}
答案 0 :(得分:0)
很简单。
无限循环动画不会通过简单地解除视图控制器而释放,因此它会在后台持续存在。
添加
if navigationController?.topViewController == self {
动画中的循环检查确实停止了循环。 这不仅修复了加速的背景循环,还修复了内存泄漏。同时向NOOB同事发出警告:重复使用仪器时:经常关闭并重新启动它们,并清理构建,否则可能会导致软件泄漏。