1.背景
ios5.0 之前,苹果是禁用次方法的。但是,如果通过addsubView的来管理视图,小子视图太多,就占内存,有些暂时不需要显示。
2.方法。
ios5.0之后, 苹果增加了新的api
addChildViewController 方法, 并且我们在使用addSubview时,同时调用addChildViewController 将View对应的视图控制器,加入到当前ViewController的管理中,
优点:逻辑分明,减少内存
方法介绍:
- (void)transitionFromViewController:(UIViewController *)fromViewControllertoViewController:(UIViewController *)toViewController duration:(NSTimeInterval)durationoptions:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion
在两个子视图控制器中转换。支持的iOS 5.0以及以后的版本。
fromViewController:当前显示在父视图控制器中的子视图控制器
toViewController:将要显示的子视图控制器
duration:完成过渡的时间;单位:秒。
options:指定的过渡效果。
animations:转换过程中,的动画。是个Block块操作。
completion:过渡完成后,执行的Block块操作。
该方法,执行完以后,fromViewController指代的视图控制器的View将从界面消失;
toViewController所指代的视图控制器的View将被载入到页面中
4.使用方法
- (void)viewDidLoad{
[super viewDidLoad];
// 对于不显示的子ViewController,要用addChildViewController方法,将其添加到父ViewController中
firstViewController=[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
[self addChildViewController:firstViewController];
secondViewController=[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self addChildViewController:secondViewController];
thirdViewController=[[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
[self addChildViewController:thirdViewController];
// 需要显示的子ViewController,要将其View添加到父View中
[self.view addSubview:thirdViewController.view];
currentViewController=thirdViewController;
}
切换:
[self transitionFromViewController:currentViewController
toViewController:firstViewController
duration:1
options:UIViewAnimationOptionTransitionCurlUp
animations:^{
// NOPS;
}
completion:^(BOOL finished) {
if (finished) {
currentViewController=firstViewController;
}else{
currentViewController=oldViewController;
}
}];
}