2012-04-11 97 views
3

我看到很多人問如何推動/流行UINavigationController s使用其他動畫,除了默認的,如flipcurl什麼是正確的方法來改變UINavigationController轉換效果

問題是,問題/答案是相對較舊的,這意味着有一些東西,如[UIView beginAnimations:](示例here),或者他們使用兩種截然不同的方法。

首先是按下控制器(設置爲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]; 

另一個是使用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」和others

第二種方法只是看着它而感覺不對。它通過使用未公開的轉換類型(即不存在於Common transition types documentation中的CATransition Class Reference)開始,這可能會讓您的應用程序在App Store中被拒絕(我的意思是可能無法找到任何應​​用程序被拒絕的參考,因爲它使用的是這些事務,也會對這件事情有所澄清),但它給了你更多的動畫靈活性,因爲我可以使用其他動畫類型,例如「cameraIris」,「rippleEffect」等等。

關於這一切,我是否真的需要上傳QuartzCoreCoreAnimation,無論何時我需要一位鴿友UINavigationController轉換?有沒有其他方法可以僅使用UIKit來實現相同的效果?

如果不是,那麼使用像「flip」和「cube」這樣的字符串值而不是預定義的常量(kCATransitionFade,kCATransitionMoveIn等等)是否會成爲我App在App Store中批准的問題?

此外,是否有其他利弊兩種方法,可以幫助我決定是否選擇其中每一個?

回答

1

關於AppStore的批准,我不認爲它是一個基於你使用什麼動畫庫的交易斷路器。您可以使用您覺得方便的任何方式,並且可以一起使用它們。從個人的角度來看,當您嘗試將動畫添加到特定事件時,我會說CoreAnimation & QuartzCore是非常棒的。由於您可以添加到單個組件中的詳細程度,因此它很棒。

但這些不是你唯一的選擇。你應該看看動畫庫COCOS2D。它們非常棒,使用起來非常簡單。例如,如果使用CoreAnimation需要30行代碼,則可以使用COCOS2D並使用3-5行代碼進行設置。此外,當您使用COCOS2D框架(chipmunk)時,可以將物理與每個組件集成。

+1

前段時間我曾嘗試過cocos2d,在1之前waaay。0發佈,並且據我記得我不能將他們的動畫與UIKit一起使用,我的意思是,我必須使用他們的CCxxx類,如CCSprites或類似的東西......所以可以使用他們的動畫框架,同時推動' UIViewController'在我的'UINavigationController'中?那將是真棒!如果是的話,你能提供一些如何完成這些的代碼? – 2012-04-11 21:34:20

+1

我不認爲這是可能的,Cocos2D使用OpenGL並管理它自己的視圖等。 – 2012-11-28 15:27:52

相關問題