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

Posted

技术标签:

【中文标题】过渡动画中的闪烁(模拟器?)【英文标题】:Flicker in transition anime (simulator?) 【发布时间】:2019-12-01 15:16:40 【问题描述】:

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

除此之外 - 我总是让这些视图“按逻辑”旋转,正如 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 时,标签并不想消失。

(如果你简单地去掉返回动画,没有区别,你仍然会在模拟器中看到闪烁。显然每次都重新启动存根应用程序进行测试,因为视图会消失。)

所以有一个闪烁。

不过,它似乎确实可以在设备上完美运行。

但是这可能是“假阳性” - 因为在设备上触发旋转的速度非常慢。

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

    我是否在上面的代码中找到了其他可以让人发现闪烁的内容?

    如果这是模拟器中的一个缺陷,您会认为这是众所周知的,所以这似乎是可疑的。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于过渡动画中的闪烁(模拟器?)的主要内容,如果未能解决你的问题,请参考以下文章

用 CSS3 动画模仿闪烁标签

用 CSS3 动画模仿闪烁标签

UIViewController 过渡在下拉手势关闭时闪烁

盒子阴影悬停过渡闪烁

Android棒棒糖共享元素过渡闪烁/闪烁

当触发 iOS Safari 中的虚拟键盘时,它会使我的 CSS 过渡闪烁。如何解决这个问题?