隐藏视图时动画是否使用汁液?

Do animations use juice while the view is hidden?

我有这个小观点V

v: UICrazyView

有各种各样的动画,运行 经常出现,并且会跟随各种烦人的状态和输入。

除此之外,有时整个事情都被隐藏了

var slideAwaySomePanel: Bool {
  didSet {
    .. do many other things
    v.isHidden = slideAwaySomePanel
  }
}

它可能会隐藏一分钟、一个小时、永远或永远不会隐藏。

我想到了,当 V 被隐藏时......动画还在 运行ning 吗?

他们还经常使用 battery/performance 吗?

我正要覆盖 isHidden 并开始编写大量脆弱的 PITA 代码,这些代码会知道在 isHidden 切换时该怎么做,但也许那是毫无意义的。

我想知道

  1. 当你isHidden,做所有的计算(甚至绘图?)继续正在进行的动画?你还在用电池吗?我们是否应该在 isHidden 期间小心停止一切以节省电量/性能。或者,isHidden 是否会停止一切?还是它仍然执行计时器和曲线,但不浪费任何绘图能力?

  2. 当你进入 isHidden 时,所有的计时器等等实际上是 "pause" 吗?如果你有一个无休止的重复动画,或者 10 秒的淡入淡出等等,它是否 "hold" 在一个确切的位置,并在你不是 isHidden 时继续?或者会发生什么?

简而言之,我们是否应该在 isHidden 生效时小心而繁琐地停止手动动画?还是没有意义?

(我突然想到,这很像在 cg 中,当对象被遮挡或在截头体之外时,你要么有动画,要么没有动画或其他物理现象。出于这个原因,游戏引擎只是有一个切换以决定该行为 "keep going or not when I'm offscreen?")

我很确定,即使我没有参考,隐藏视图也不是动画的,因为 Core Animation 在性能方面的实现非常有效。

核心动画层和动画有自己的时钟。 The animation state is calculated from this time。当视图不可见时,时钟继续 运行。由于图层和动画对象都不会因隐藏视图而被破坏,因此动画在重新出现后具有与视图未被隐藏时的状态完全相同的状态。

Apple 给出了 some nice examples 如何修改某些用例的动画时间。