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 を呼び出すこともできますが、もっと良い方法があるはずです。セグエ自体は中断されることなく完了できるはずです。