我正在实现以下解决方案来暂停UIView动画:
https://stackoverflow.com/a/3003922/1014164
暂停和恢复动画正在运行,但是:
在我暂停动画并继续旋转设备后,屏幕上的其他视图开始调整大小,但由于某种原因,这会冻结屏幕上的所有交互和视图 - 方向更改不再有效,按钮是无响应。
但是,如果我在动画运动时旋转设备,一切正常。
我做的另一项测试是取出外部视图的自动调整大小,其中包含动画视图,这样可以使事情正常工作。
暂停图层和父图层的自动调整大小之间似乎存在一些冲突。我只是无法弄清楚如何绕过它。
非常感谢任何帮助。
答案 0 :(得分:2)
正如您所发现的那样,视图图层暂停的事实意味着当您旋转设备时它无法动画为新尺寸,这会冻结用户界面。
然而,有一个更清洁的解决方案,不会放弃iOS的漂亮的调整大小动画或自动布局。您可以在根层下创建一个中间层,并将所有其他层放在其下。然后,您应该使用此中间层来控制动画的速度(或暂停它们)。
由于iOS在设备旋转时不会调整子图层的大小,因此暂停图层并不重要。
(我意识到这个答案很晚,但它仍然可以为某人服务)。
答案 1 :(得分:1)
由于方向更改会导致正在使用其他视图的动画,因此我必须禁用这些视图的自动调整大小,从而避免在暂停动画时发生冲突。 那些正在自动调整的视图在方向通知方法中手动调整大小。
答案 2 :(得分:0)
在@ tarmes的后续版中,您还可以尝试以下内容:
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)
{
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
if let myView = self.view
{
let currentLayerSpeed = myView.layer.speed
coordinator.animateAlongsideTransition(
{
(context) -> Void in
// Animating alongside… nothing to animate.
if currentLayerSpeed == 0
{
myView.layer.speed = 1.0
}
})
{
// Completion
(context) -> Void in
// Rotation animation completed – resetting the layer speed
myView.layer.speed = currentLayerSpeed
}
}
}