1 背景
iOS 5.0 以前,我们在一个视图控制器中会用addSubView方法来添加很多子View,并进行对这些子View的控制
但是,这样做,有一个问题:
一个UIViewController 的View可能有很多的小的子View。这些子View很多时候被盖在最后,我们在最外层ViewController的viewDidLoad方法中,用addSubview增加了大量的子view。这些子view大多数不会一直处于界面上,只是在某些情况下才会出现,例如登入失败的view,上传附件成功的提示view,网络失败的提示view等等。但是虽然这些view很少出现,但是我们却常常一直把他们放在内存中,另外,当收到内存警告时,我们只能自己手动把这些view从super view中去掉
2 替代方法
就是用transitionFromViewController:toViewController 来替代
苹果的API增加了addChildViewController方法,并且希望我们在使用addsubView时,同时调用[self addChildViewController:child] 方法将subview 对应的viewController也加到当前ViewController的管理中。
对于那些当前暂时不需要显示的subView,之通过addChildViewController把subViewController加进去;需要显示的时候再调用transitionFromViewController:toViewController方法。将其添加进入底层的ViewController中。
这样做的好处:
1、无疑,对页面中的逻辑更加的分明了。相应的View对应相应的ViewController
2、当某个子View没有显示时,将不会被Load,减少了内存的使用
3、当内存紧张时,没有Load的view将首先被释放,优化了程序的内存释放机制
3 transitonFromViewController:toViewController:duration:options:animations:compltion
- (void)transitionFromViewController:(UIViewController *) fromViewController toViewController: (UIViewController *) toViewController duration:(NSTimeInterval) duration options:(UIViewAnimationOptions) options animations:(viod(^)(void)animations )animations completion:(void(^)(BOOL finished))completion
在两个子视图控制器中转换,支持iOS 5.0 以及以后的版本
fromViewController:当前显示在父视图控制器中的子视图控制器
toViewController: 将要显示的子视图控制器
duration:完成过渡的时间;单位:秒
options:指定的过渡效果
animations:转换过程中的动画,是个Block块操作
completion:过渡完成后,执行的Block块操作
该方法执行完成后,fromVIewController指代的视图控制器的view将从界面消失;toViewController所指代的视图控制器的View将被载入到页面中