1

UIViewアニメーションを一時停止するために、次のソリューションを実装しています。

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

ただし、アニメーションの一時停止と再開は機能しています。

アニメーションを一時停止してデバイスの回転に進むと、画面上の他のビューのサイズが変更され始めますが、何らかの理由で、画面上のすべてのインタラクションとビューがフリーズします-向きの変更が機能しなくなり、ボタンが応答しなくなります。

ただし、アニメーションの移動中にデバイスを回転させると、すべてが正常に機能します。

私が行ったもう1つのテストは、アニメーション化されているビューを収容する外側のビューの自動サイズ変更を行うことでした。これにより、物事が適切に機能するようになります。

一時停止したレイヤーと親レイヤーの自動サイズ変更の間に競合があるようです。私はそれを回避する方法を理解することができません。

どんな助けでも大歓迎です。

4

3 に答える 3

1

In follow-up to @tarmes’s, you can also try something like:

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 に答える
1

向きを変更すると、使用中の他のビューでアニメーションが発生するため、これらのビューの自動サイズ変更マスクを無効にして、アニメーションを一時停止するときの競合を回避する必要がありました。自動サイズ変更されていたビューは、方向通知メソッドで手動でサイズ変更されました。

于 2013-01-08T16:00:08.867 に答える