转自hcios
一、概念简述
1.1 UIWindow
- UIWindow是一个特殊的UIView,UIWindow类继承自UIView;
- 一般来说,一个App只有一个UIWindow,但特定情况下也会出现多个UIWindow,例如,键盘弹出的情况下,就会存在多个UIWindow;
- iOS启动完毕后,创建的第一个视图控件就是UIWindow,此时需要给UIWindow对象制定根控制器rootViewController属性,系统会自动把rootViewController.view添加到window上(addSubview:方法),显示出来;
- 只要UIWindow对象存在,即App未被销毁,则rootViewcontroller就不会被销毁。
1.2 UIView
- 每个UIView都负责在屏幕上定义个矩形区域的显示,可以用设置backgroundColor属性来查看矩形的大小;
- 每个UIView对象都要负责渲染视图矩形区域内的内容,并且响应该区域中发生的触碰事件;
- 每个UIView对象中都可以添加一个或多个子UIView对象;
- UIView对象显示在UIWindow上,用户才能看到界面的样式。
- 通过view.window属性,可以获得某个UIView所在的UIWindow。
1.3 UIViewController
- 每个UIViewController都有一个view属性,来显示该控制器的样式;
- UIViewController负责管理在view上显示的数据,并协调他们和应用程序其他部分的关系;
- UIViewController类负责创建其管理的视图及在低内存时将它们从内容中移出(didReceiveMemoryWarning方法中实现);
-
视图控制器还为某些标准的系统行为提供自动响应。比如,在响应设备方向变化时,如果应用程序支持该方向,视图控制器可以对其管理的视图进行尺寸调整,使其适应新的方向。
二、关系描述
2.1 普通控制器的显示与移除
- 显示一个普通类型的控制器可以使用如下方法
- 移除一个普通类型的控制器可以使用如下方法
- 控制器被移除后,立即被销毁;
- (重要)如上图所示,如果执行多次presentViewController:操作,新显示的控制器view会覆盖之前的控制器view,但旧的控制器view不会销毁,而是会被隐藏,直至执行了dismissViewControllerAnimated:方法,才会被销毁。
2.2 容器型控制器的显示与移除
- 常见的容器型控制器有:UINavigationController,UITabbarController;
- 容器型控制器的显示,会把多个子控制器view组合起来显示;
- UINavigationController使用如下方法切换控制器:
2.3 普通控制器与容器型控制器组合显示
- 对于普通控制器和容器型控制器组合显示的情况,如果普通控制器是使用present方法显示的话,会覆盖之前的容器型控制器view。