UINavigationController
デフォルトのアニメーション以外に、flip
やなどの他のアニメーションを使用してsをプッシュ/ポップする方法を尋ねる人がたくさんいますcurl
。
問題は、質問/回答が比較的古いことです。つまり、[UIView beginAnimations:]
(ここの例)のようなものがあるか、2つの非常に異なるアプローチを使用しています。
transitionFromView:toView:duration:options:completion:
1つ目は、次のように、コントローラーをプッシュする前に(アニメーションフラグをに設定してNO
)UIViewのセレクターを使用することです。
UIViewController *ctrl = [[UIViewController alloc] init];
[UIView transitionFromView:self.view
toView:ctrl.view
duration:1
options:UIViewAnimationOptionTransitionFlipFromTop
completion:nil];
[self.navigationController pushViewController:ctrl animated:NO];
もう1つは、次CoreAnimation
のように明示的に使用することです。CATransaction
// remember you will have to have the QuartzCore framework added to your project for this approach and also add <QuartzCore/QuartzCore.h> to the class this code is used
CATransition* transition = [CATransition animation];
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
transition.duration = 1.0f;
transition.type = @"flip";
transition.subtype = @"fromTop";
[self.navigationController.view.layer removeAllAnimations];
[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
UIViewController *ctrl = [[UIViewController alloc] init];
[self.navigationController pushViewController:ctrl animated:NO];
どちらのアプローチにも長所と短所があります。
最初のアプローチでは、はるかにクリーンなコードが得られますが、「suckEffect」、「cube」などのアニメーションの使用が制限されます。
2番目のアプローチは、それを見ただけでは間違っていると感じます。それは、ドキュメント化されていないトランジションタイプ(つまり、CATransitionクラスリファレンスの一般的なトランジションタイプのドキュメントには存在しない)を使用することから始まります。これにより、App Storeからアプリが拒否される可能性があります(つまり、使用していたために拒否されたアプリの参照が見つからなかった可能性があります)このトランザクションは、この問題についても説明していただければ幸いです)が、「cameraIris」、「rippleEffect」などの他のアニメーションタイプを使用できるため、アニメーションの柔軟性が大幅に向上します。
それに関して、私は本当に魅力的な移行が必要なときはいつでもアピールする必要がQuartzCore
ありますか?のみを使用して同じ効果を達成する他の方法はありますか?CoreAnimation
UINavigationController
UIKit
kCATransitionFade
そうでない場合、事前定義された定数( 、、など)の代わりに「flip」や「cube」などの文字列値を使用することはkCATransitionMoveIn
、App Storeでのアプリの承認に関する問題になりますか?
また、両方のアプローチに関して、それぞれを選択するかどうかを決定するのに役立つ他の長所と短所はありますか?