过渡动画中的闪烁(模拟器?)

Flicker in transition anime (simulator?)

有一个带有几个子视图的白色全屏视图,比如几个标签。

{旁白 - 我总是让这样的视图旋转 "logically",正如 Natasha HERE 所解释的那样。我提到这一点是为了防止它与行为相关,但不管怎样,行为似乎都会发生。}

当 iPhone 旋转时...

让一切都消失,

class CalmRotation: UIViewController {

    override func willTransition(to newCollection: UITraitCollection,
            with coordinator: UIViewControllerTransitionCoordinator) {

        for v in view.subviews { v.alpha = 0 }

轮换后,把他们带回来...

        let s = coordinator.transitionDuration * 0.5
        coordinator.animate(alongsideTransition: { _ in
            },completion: { [weak self] _ in
              for v in self?.view.subviews ?? [] {
               UIView.animate(withDuration:s, animations:{v.alpha = 1})}
            })
        super.willTransition(to: newCollection, with: coordinator)
    }

在今天的新 Xcode 中,在任何模拟器中试试这个。点击命令箭头旋转那个吸盘。

注意到令人不安的 闪烁

在 alpha=0 时,标签真的不想消失。

(如果你只是简单地取消恢复动画,这没有什么区别,你仍然会在模拟器中看到闪烁。显然每次重新启动存根应用程序进行测试,因为视图将消失.)

所以有闪烁。

但是,它似乎在设备上完美运行。

但是 可能是 "fake positive" - 因为在设备上触发旋转的速度非常慢。

  1. 事实上,是否真的有一个调用"will .. WillTransition",以便我们可以知道即将发生转换?总的来说,这似乎是一种更好的方法来在转换发生之前完成您想要完成的事情,并且可能会解决此类闪烁事件。

  2. 我是否在上面的代码中发现了其他人可以发现闪烁的东西?

  3. 如果这是模拟器中的一个缺陷,你会认为它是众所周知的,所以这看起来很可疑。

我在设备上进行了旋转的屏幕录制,并在模拟器上进行了屏幕录制,并放慢了它们的速度。有趣的是,当您在模拟器上旋转时,设备旋转发生在任何动画之前。见下文:

虽然我没有解决方案,但我敢打赌这是另一个模拟器 bug/issue。