我看到很多人問如何推動/流行UINavigationController
s使用其他動畫,除了默認的,如flip
或curl
。什麼是正確的方法來改變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」等等。
關於這一切,我是否真的需要上傳QuartzCore
和CoreAnimation
,無論何時我需要一位鴿友UINavigationController
轉換?有沒有其他方法可以僅使用UIKit
來實現相同的效果?
如果不是,那麼使用像「flip」和「cube」這樣的字符串值而不是預定義的常量(kCATransitionFade
,kCATransitionMoveIn
等等)是否會成爲我App在App Store中批准的問題?
此外,是否有其他利弊兩種方法,可以幫助我決定是否選擇其中每一個?
前段時間我曾嘗試過cocos2d,在1之前waaay。0發佈,並且據我記得我不能將他們的動畫與UIKit一起使用,我的意思是,我必須使用他們的CCxxx類,如CCSprites或類似的東西......所以可以使用他們的動畫框架,同時推動' UIViewController'在我的'UINavigationController'中?那將是真棒!如果是的話,你能提供一些如何完成這些的代碼? – 2012-04-11 21:34:20
我不認爲這是可能的,Cocos2D使用OpenGL並管理它自己的視圖等。 – 2012-11-28 15:27:52