iOS 5.0 以后,苹果新的API增加了transitionFromViewController方法.
该方法希望我们在使用addSubView时,同时调用[self addChildViewController:child]方法,将subView对应的viewController也加入到当前的ViewController管理中.
对于那些暂不需要显示的view,只通过addChildViewController将subViewController添加进去,在需要显示的时候调用transitionFromViewController,将其加入底层的viewController.
使用该方法的好处:
1.使页面逻辑更加明了,相应的view对应相应的viewController.
2.当某个子view没有显示时,将不会被load,减少内存的使用.
3.当内存紧张时,没有load的view将会首先被释放,优化了程序的内存释放机制.
- (void)viewDidLoad {
[super viewDidLoad];
FirstViewController *firstVC = [[FirstViewController alloc]init];
SecondViewController *secondVC = [[SecondViewController alloc]init];
[self addChildViewController:firstVC];
[self addChildViewController:secondVC];
[self.view addSubview:[self.childViewControllers[0] view]];
}
fromViewController:当前显示在父视图控制器中的子视图控制器
toViewController:将要显示的子视图控制器
duration:完成过渡的时间 单位:秒
options:指定的过渡效果
animations:转换过程中的动画,是个block块操作
completion:过度完成后,执行的block操作
if (index == 0) {
[self transitionFromViewController:self.childViewControllers[1] toViewController:self.childViewControllers[0] duration:0 options:0 animations:0 completion:^(BOOL finished) {
/*
在项目中使用addChildViewController添加,但是发现当点击切换时有时如果点击过于频繁或者速度过快,就会出现页面加载不出来的情况.使用下面的方式便能完美解决.
*/
/**********************************/
if (finished) {
[self.view addSubview:[self.childViewControllers[0] view]];
} else {
[self.view addSubview:[self.childViewControllers[1] view]];
}
/**********************************/
}];
} else if (index == 1) {
[self transitionFromViewController:self.childViewControllers[0] toViewController:self.childViewControllers[1] duration:0 options:0 animations:0 completion:^(BOOL finished) {
if (finished) {
[self.view addSubview:[self.childViewControllers[1] view]];
} else {
[self.view addSubview:[self.childViewControllers[0] view]];
}
}];
}