我有两个视图控制器。 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()
    }
    

  • 08-17 16:51