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

时间:2019-07-23 14:30:57

标签: ios screen-rotation

具有几个子视图的白色全屏视图,例如几个标签。

{放在一边-我总是使这样的视图“逻辑地”旋转,这正是娜塔莎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时,标签并不想消失。

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

所以有一个闪烁。

但是,它似乎确实可以在设备上正常工作。

但是可能是“假阳性”-因为旋转是在设备上触发得如此缓慢。

  1. 实际上,实际上是否存在一个名为“ will .. WillTransition”的调用,以便我们可以知道过渡即将发生?通常,这似乎是在过渡发生之前做您想做的事情的一种更好的方法,并且大概可以解决此类闪烁事件。

  2. 我是否在上面的代码中添加了其他可以让人们发现闪烁的内容?

  3. 如果这是模拟器中的缺陷,您会认为它是众所周知的,因此这似乎值得怀疑。

1 个答案:

答案 0 :(得分:1)

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

Simulator recording

尽管我没有解决方案,但我敢打赌这是另一个模拟器错误/问题。