我有两个视图控制器。 AnimationVC 具有一些UIView动画,而 DestinationVC 没有任何动画。
我有CPU使用问题。执行完segue后,即使这些行属于执行segue的 AnimationVC ,这些动画块仍会显示在乐器中。
UIView.animate(withDuration: 1.0, delay: 0.0, options: [.curveEaseInOut, .autoreverse, .repeat], animations: {
self.s1.alpha = 0.0
self.s3.alpha = 0.0
}, completion: nil)
和
let dur = 0.5/12
UIView.animateKeyframes(withDuration: 30.0, delay: 0.0, options: [.repeat, .calculationModeCubic], animations: {
UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: dur, animations: {
self.sc.alpha = 1.0
})
UIView.addKeyframe(withRelativeStartTime: 1.0-dur, relativeDuration: dur, animations: {
self.sc.alpha = 0.0
})
UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 1.0, animations: {
self.sc.transform = CGAffineTransform(rotationAngle: .pi*0.2)
})
UIView.addKeyframe(withRelativeStartTime: 0.0, relativeDuration: 1.0, animations: {
self.sc.center.y = 0.1*self.frame.size.height
})
}, completion: nil)
我尝试调用此破坏函数...
func destruct(){
layer.removeAllAnimations()
subviews.forEach { $0.removeFromSuperview() }
}
...在
在执行segue 之前的
AnimationVC 的deinit方法
尽管如此,它仍然显示 Activity 状态并占用40%的CPU负载。我该如何破坏呢?
我什至用...重置了 DestinationVC 上的导航堆栈。
self.navigationController?.viewControllers = [self]
...并且我看到了 AnimationVC 中 deinit 的行,动画延迟关闭仍然有效。
最佳答案
事实证明
...
}) { (finished) in
if finished {
self.specialAniamtion(delay: 2.0)
}
}
并在deinit上调用destruct()对其进行了修复。
func destruct(){
layer.removeAllAnimations()
}