过渡动画中的闪烁(模拟器?)
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" - 因为在设备上触发旋转的速度非常慢。
事实上,是否真的有一个调用"will .. WillTransition",以便我们可以知道即将发生转换?总的来说,这似乎是一种更好的方法来在转换发生之前完成您想要完成的事情,并且可能会解决此类闪烁事件。
我是否在上面的代码中发现了其他人可以发现闪烁的东西?
如果这是模拟器中的一个缺陷,你会认为它是众所周知的,所以这看起来很可疑。
我在设备上进行了旋转的屏幕录制,并在模拟器上进行了屏幕录制,并放慢了它们的速度。有趣的是,当您在模拟器上旋转时,设备旋转发生在任何动画之前。见下文:
虽然我没有解决方案,但我敢打赌这是另一个模拟器 bug/issue。
有一个带有几个子视图的白色全屏视图,比如几个标签。
{旁白 - 我总是让这样的视图旋转 "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" - 因为在设备上触发旋转的速度非常慢。
事实上,是否真的有一个调用"will .. WillTransition",以便我们可以知道即将发生转换?总的来说,这似乎是一种更好的方法来在转换发生之前完成您想要完成的事情,并且可能会解决此类闪烁事件。
我是否在上面的代码中发现了其他人可以发现闪烁的东西?
如果这是模拟器中的一个缺陷,你会认为它是众所周知的,所以这看起来很可疑。
我在设备上进行了旋转的屏幕录制,并在模拟器上进行了屏幕录制,并放慢了它们的速度。有趣的是,当您在模拟器上旋转时,设备旋转发生在任何动画之前。见下文:
虽然我没有解决方案,但我敢打赌这是另一个模拟器 bug/issue。