flip
またはcurl
のように、デフォルトのもの以外のアニメーションを使用してUINavigationController
をプッシュ/ポップする方法を尋ねる人がたくさんいます。UINavigationControllerトランジションエフェクトを変更する適切な方法
問題は、質問/回答のいずれかが比較的古く、つまり[UIView beginAnimations:]
(例:here)のようなものを持っているか、まったく異なる2つのアプローチを使用していることを意味します。
最初は次のように、(NO
に設定アニメーションフラグで)コントローラを押す前のUIViewのtransitionFromView:toView:duration:options:completion:
セレクタを使用することである。
UIViewController *ctrl = [[UIViewController alloc] init];
[UIView transitionFromView:self.view
toView:ctrl.view
duration:1
options:UIViewAnimationOptionTransitionFlipFromTop
completion:nil];
[self.navigationController pushViewController:ctrl animated:NO];
もう一つは、次のようなCATransaction
で明示的CoreAnimation
を使用することです:
// 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」、othersなどのアニメーションを使用することを制限しています。
第2のアプローチは、それを見るだけで間違っていると感じます。それは、文書化されていないトランジションタイプ(Common transition types documentationのCATransition Class Referenceには存在しない)を使用することから始まります。これは、App Storeからあなたのアプリが拒否される可能性があります。この問題についての説明もありがたいですが)、 "cameraIris"、 "rippleEffect"などの他のアニメーションタイプを使用することができるため、アニメーションの柔軟性が大幅に向上します。
私はQuartzCore
とCoreAnimation
のアピールを本当に必要としますか?UINavigationController
に変更する必要がありますか? UIKit
だけを使用して同じ効果を達成する他の方法はありますか?そうでない場合
、「フリップ」し、代わりに事前定義された定数の「キューブ」のような文字列値の使用は、(kCATransitionFade
は、kCATransitionMoveIn
は、などが...)App Storeで私のアプリの承認に関する問題になりますか?
また、それぞれを選択するかどうかを決定するのに役立つ両方のアプローチについて、他の長所と短所がありますか?
私はしばらく前にcocos2dを試しました.1の前にwaaay。0のリリースと私は限り、私は自分のアニメーションをUIKitと一緒に使うことができなかったことを覚えている限り、私はCCSpriteなどのCCxxxクラスを使用しなければならなかった...そういうわけで、アニメーションフレームワークを使用して、私の 'UINavigationController'のUIViewControllerler'ですか?それは素晴らしいだろう!もしそうなら、あなたはそれを達成するためのいくつかのコードを提供することができますか? –
私はこれが可能だとは思わない、Cocos2DはOpenGLを使用し、独自のビューなどを管理する –