【发布时间】: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”以便我们知道转换即将发生?一般来说,这似乎是在转换发生之前执行您想要完成的事情的更好方法,并且可能会解决此类闪烁事件。
我是否在上面的代码中找到了其他可以让人发现闪烁的内容?
如果这是模拟器中的一个缺陷,您会认为这是众所周知的,所以这似乎是可疑的。
【问题讨论】:
标签: ios screen-rotation