4

iOS (バージョン 5 で問題ありません) では、次を使用して、ある UIViewController から別の UIViewController に遷移する画像を反転およびズームするカスタム アニメーションがあります。

TCFlipZoomSubviewSegue segue=[[TCFlipZoomSubviewSegue alloc] initWithIdentifier:@"SegueToMenuTable" source:self.iViewController destination:self.mViewController];
[segue perform];

そして私が持っている実行方法で:

[UIView animateWithDuration:3.75f
                      delay:0.0f
                    options:UIViewAnimationOptionAllowAnimatedContent
                 animations:^{
                   self.subviewTransformView.layer.transform=transform;
                 } completion:^(BOOL finished) {
                   [destination.parentViewController.view bringSubviewToFront:destination.view];
                 }

それはすべて正常に動作しますが、アニメーション中にデバイスを回転させると、あらゆる種類の問題が発生します (レイアウトが台無しになります)。私が望むのは、オリエンテーション イベントが発生する前にアニメーションが完了することです。これは iPhone の標準的な動作です。たとえば、INBOX をクリックした直後にメール アプリを回転させてみると、スライドの遷移が完了してから回転します。Stocks アプリなどと同じです。これは、標準の Push アニメーションなどを使用した場合に発生することです。しかし、独自のアニメーションを実行する必要があります。

では、彼らはどのようにそれを行うのでしょうか?

アニメーションが終了するまで方向の変更を防ぐ (遅延またはブロックする) にはどうすればよいですか? アニメーション化するときに shouldAutorotateToInterfaceOrientation: で NO と言うだけで変更を簡単に停止できますが、後で向きを変更する必要があります。AttemptRotationToDeviceOrientation を呼び出すこともできますが、もっと良い方法があるはずです。セグエ自体は中断されることなく完了できるはずです。

4

1 に答える 1

4

あなたが言った方法はおそらくあなたがそれをしなければならない方法だと思います-つまり、NOをshouldAutorotateToInterfaceOrientation:に返し、アニメーションが終わったらattemptRotationToDeviceOrientationを呼び出します。アニメーションの進行中にユーザーが回転しようとした場合に設定される何らかのフラグが必要になる可能性があるため、アニメーションの終了時にattemptRotationToDeviceOrientationを呼び出す必要があるかどうかがわかります。

于 2012-08-17T21:14:01.117 に答える