2012-04-11 8 views
3

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 documentationCATransition Class Referenceには存在しない)を使用することから始まります。これは、App Storeからあなたのアプリが拒否される可能性があります。この問題についての説明もありがたいですが)、 "cameraIris"、 "rippleEffect"などの他のアニメーションタイプを使用することができるため、アニメーションの柔軟性が大幅に向上します。

私はQuartzCoreCoreAnimationのアピールを本当に必要としますか?UINavigationControllerに変更する必要がありますか? UIKitだけを使用して同じ効果を達成する他の方法はありますか?そうでない場合

、「フリップ」し、代わりに事前定義された定数の「キューブ」のような文字列値の使用は、(kCATransitionFadeは、kCATransitionMoveInは、などが...)App Storeで私のアプリの承認に関する問題になりますか?

また、それぞれを選択するかどうかを決定するのに役立つ両方のアプローチについて、他の長所と短所がありますか?

答えて

1

AppStoreの承認に関して、私はあなたが使っているアニメーションライブラリに基づいて、その契約を破るとは思わない。これまでにあなたにとって便利だと思うものを使うことができ、一緒に使うこともできます。個人的な見地からは、特定のイベントにアニメーションを追加しようとしているときにCoreAnimation & QuartzCoreがかなり素晴らしいと言います。個々のコンポーネントに追加できるディテールのレベルが非常に優れています。

しかし、これらはあなたの唯一の選択肢ではありません。アニメーション用のライブラリはCOCOS2Dです。彼らは本当に素晴らしいと非常に使いやすいです。たとえば、CoreAnimationを使用して30行のコードを使用する場合は、COCOS2Dを使用して、3〜5行のコードで設定できます。また、COCOS2Dフレームワーク(chipmunk)を使用すると、物理コンポーネントを各コンポーネントに統合できます。

+1

私はしばらく前にcocos2dを試しました.1の前にwaaay。0のリリースと私は限り、私は自分のアニメーションをUIKitと一緒に使うことができなかったことを覚えている限り、私はCCSpriteなどのCCxxxクラスを使用しなければならなかった...そういうわけで、アニメーションフレームワークを使用して、私の 'UINavigationController'のUIViewControllerler'ですか?それは素晴らしいだろう!もしそうなら、あなたはそれを達成するためのいくつかのコードを提供することができますか? –

+1

私はこれが可能だとは思わない、Cocos2DはOpenGLを使用し、独自のビューなどを管理する –

関連する問題