UIViewController 可以添加过渡动画了
下面详细介绍一下addChildViewController,一个ViewController可以添加多个子ViewController,但是这些子ViewController只有一个是显示到父视图中的,可以通过transitionFromViewController:toViewController:duration:options:animations:completion:这个方法转换显示的子视图。同时加入相应的动画。 AD: 在iOS5中,ViewController中新添加了下面几个方法: 1. addChildViewController: 2. removeFromParentViewController 3. transitionFromViewController:toViewController:duration:options:animations:completion: 4. willMoveToParentViewController: 5. didMoveToParentViewController: 下面详细介绍一下addChildViewController,一个ViewController可以添加多个子ViewController,但是这些子ViewController只有一个是显示到父视图中的,可以通过transitionFromViewController:toViewController:duration:options:animations:completion:这个方法转换显示的子视图。同时加入相应的动画。下面以一个例子来说明,最后实现的效果:
点击其中的按钮如下:
下面详细介绍一下上述效果的实现: . 创建项目,changeViewController。 . 添加相应的viewController,MainViewController、FirstViewController、SecondViewController、ThirdViewController。如下图:
3.把MainViewController添加到window中。 1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 2. { 3. self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 4. // Override point for customization after application launch. 5. MainViewController *mainViewController=[[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil]; 6. self.window.rootViewController=mainViewController; 7. [self.window makeKeyAndVisible]; 8. return YES; 9. } 4.在MainViewController中添加三个按钮,并且连接onClickbutton方法。 5.在MainViewController中添加三个子controller 1. #pragma mark – View lifecycle - (void)viewDidLoad 2. { 3. [super viewDidLoad]; 4. // Do any additional setup after loading the view from its nib. 5. 6. FirstViewController *firstViewController=[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 7. [self addChildViewController:firstViewController]; 8. 9. SecondViewController *secondViewController=[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 10. [self addChildViewController:secondViewController]; 11. 12. 13. ThirdViewController *thirdViewController=[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil]; 14. [self addChildViewController:thirdViewController]; 15. 16. [contentView addSubview:thirdViewController.view]; 17. currentViewController=thirdViewController; 18. } 其中要把其中的一个子controller的view添加到根视图中,这样才能显示出相应的视图。 6.点击按钮,切换视图。 1. -(IBAction)onClickbutton:(id)sender 2. { 3. FirstViewController *firstViewController=[self.childViewControllers objectAtIndex:0]; 4. ThirdViewController *thirdViewController=[self.childViewControllers objectAtIndex:2]; 5. SecondViewController *secondViewController=[self.childViewControllers objectAtIndex:1]; 6. if ((currentViewController==firstViewController&&[sender tag]==1)||(currentViewController==secondViewController&&[sender tag]==2) ||(currentViewController==thirdViewController&&[sender tag]==3) ) { 7. return; 8. } 9. UIViewController *oldViewController=currentViewController; 10. switch ([sender tag]) { 11. case 1: 12. { 13. NSLog(@"留言及回复"); 14. [self transitionFromViewController:currentViewController toViewController:firstViewController duration:4 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ 15. } completion:^(BOOL finished) { 16. if (finished) { 17. currentViewController=firstViewController; 18. }else{ 19. currentViewController=oldViewController; 20. } 21. }]; 22. } 23. break; 24. case 2: 25. { 26. NSLog(@"生日提醒"); 27. [self transitionFromViewController:currentViewController toViewController:secondViewController duration:1 options:UIViewAnimationOptionTransitionFlipFromTop animations:^{ 28. 29. } completion:^(BOOL finished) { 30. if (finished) { 31. currentViewController=secondViewController; 32. }else{ 33. currentViewController=oldViewController; 34. } 35. }]; 36. } 37. break; 38. case 3: 39. { 40. NSLog(@"好友申请"); 41. [self transitionFromViewController:currentViewController toViewController:thirdViewController duration:1 options:UIViewAnimationOptionTransitionFlipFromBottom animations:^{ 42. 43. } completion:^(BOOL finished) { 44. if (finished) { 45. currentViewController=thirdViewController; 46. }else{ 47. currentViewController=oldViewController; 48. } 49. }]; 50. } 51. break; 52. default: 53. break; 54. } 55. } 其中我把按钮设置成不同的tag了。 这时候点击按钮,就可以切换子视图了。 这样写的好处: 多个UIViewController之间切换可以添加动画 当内存警告的时候,可以把当前不是激活状态的ViewController内存释放。 可以把代码更好分开 项目源代码:http://easymorse-iphone./svn/trunk/changeViewController/
|