1

我正在实施以下解决方案来暂停 UIView 动画:

https://stackoverflow.com/a/3003922/1014164

暂停和恢复动画正在工作,但是:

在我暂停动画并继续旋转我的设备后,屏幕上的其他视图开始调整大小,但由于某种原因,这会冻结屏幕上的所有交互和视图 - 方向更改不再起作用,按钮无响应.

但是,如果我在动画运动时旋转设备,则一切正常。

我进行的另一项测试是取消外部视图的自动调整大小,其中包含动画视图,这可以让事情正常工作。

暂停的图层和父图层的自动调整大小之间似乎存在一些冲突。我只是不知道如何绕过它。

任何帮助将不胜感激。

4

3 回答 3

2

正如您所发现的,视图层被暂停的事实意味着当您旋转设备时它无法动画到新的大小,这会冻结 UI。

然而,有一个更干净的解决方案不会放弃 iOS 的漂亮的调整大小动画或自动布局。您可以在根层下方创建一个中间层,并将所有其他层放在其下。然后你应该使用这个中间层来控制动画的速度(或暂停它们)。

由于 iOS 不会在设备旋转时调整子图层的大小,因此图层暂停并不重要。

(我意识到这个答案很晚,但它可能仍然为某人服务)。

于 2013-10-11T15:35:00.603 回答
1

由于方向更改会导致使用其他视图上的动画,因此我必须禁用这些视图的自动调整大小遮罩,从而避免在暂停动画时发生冲突。那些正在自动调整大小的视图在方向通知方法中手动调整大小。

于 2013-01-08T16:00:08.867 回答
1

在@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
        }
    }
}
于 2016-02-03T12:45:46.533 回答