UIView和UIWindow之间的关系

iPhone OS通过UIView和UIWindow在屏幕上展现图形内容。UIWindow为内容显示提供背景平台,而UIView负责绝大部分的内容描画,并负责响应事件。

简单的讲,UIView需要一个窗口UIWindow来展示页面,而UIWindow类似于一个UIView。

1、继承关系

UIView是视图的基类,UIViewController是视图控制器的基类,UIResponder是表示一个可以在屏幕上响应触摸事件的对象;UIWindow 继承于UIView, 但这个 UIWindow 是一个重中之重的View。


2、UIWindow

UIWindow对象是所有UIView的根视图,管理和协调的应用程序的显示。UIWindow类是UIView的子类,可以看作是特殊的UIView。一般应用程序只有一个UIWindow对象,即使有多个UIWindow对象,也只有一个UIWindow可以接受到用户的触屏事件。在AppDelegate的didFinishLaunchingWithOptions方法中,有这样一段code:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ;
self.window.backgroundColor = [UIColor grayColor];       //给window设置一个背景色 
[self.window makeKeyAndVisible];     //让window显示出来  
//在本应用中打开的UIWindow列表,这样就可以接触应用中的任何一个UIView对象!
[UIApplication sharedApplication].windows

/**
*程序中每个时刻只能有一个 UIWindow是keyWindow。
*如果某个UIWindow内部的文本框不能输入文字,
*可能是因为这个 UIWindow不是keyWindow
**/
[UIApplication sharedApplication].keyWindow;

//获得某个UIView所在的UIWindow!
view.window;
- (void)makeKeyWindow;//让当前UIWindow变成keyWindow(主窗口)!
- (void)makeKeyAndVisible; //让当前UIWindow变成keyWindow,并显示出来!

3、UIView

UIView对象定义了一个屏幕上的一个矩形区域,同时处理该区域的绘制和触屏事件。可以在这个区域内绘制图形和文字,还可以接收用户的操作。一个UIView的实例可以包含和管理若干个子UIView,常用方法:

- (void)removeFromSuperview;将视图从父视图中移除
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index;插入一个视图到指定位置,视图越在下面,index越小
- (void)exchangeSubviewAtIndex:(NSInteger)index1 withSubviewAtIndex:(NSInteger)index2;将index1和index2位置的两个视图互换位置

- (void)addSubview:(UIView *)view;添加视图到父视图
- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview;插入视图到指定视图的下面
- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview;插入视图到指定视图上面

- (void)bringSubviewToFront:(UIView *)view;把视图移到最顶层
- (void)sendSubviewToBack:(UIView *)view;把视图移到最底层
- (UIView *)viewWithTag:(NSInteger)tag;根据视图的tag属性找到搜索视图

4、题外话

UIViewController对象负责管理所有UIView的层次结构,并响应设备的方向变化。UIScreen可以获取设备屏幕的大小。

感谢:http://blog.csdn.net/kuqideyupian/article/details/7731942

你可能感兴趣的:(UIView和UIWindow之间的关系)