来自视频课件: http://code4app.com/course/28-2954-3199
UIKit是一个提供了在IOS实现了图形,事件驱动程序的框架
UIView是视图的基类
UIViewController是视图控制器的基类
UIResponder表示是一个可以在屏幕上接受触摸事件的对象。
窗口(UIWindow)是视图的一个子类,窗口的主要功能,1,提供区域来显示视图,2将事件分发给视图。
UIKit的类图:
窗口和视图
窗口本身不具备任何可见的内容,它是对应用程序的视图提供了一个基本的容器。视图就是在你想要在窗口的某个部分显示的内容。可以是图像,文本等。视图还可以组织和管理其他视图。总体来讲,一样的都是视图树,都遵循组合模式。
每个应用程序至少需要一个窗口,通常窗口用UIWindow的实例来表示。注意UIWindow继承自UIView。
大多数IOS应用程序在生命周期内只有一个UIWindow。并且在应用程序的生命周期内,窗口跨越整个设备的主屏幕和应用程序的主nib文件被加载(或者以编程的方式被加载)。但是,如果应用程序支持外部显示器视频输出,它可以创建额外的窗口,以显示外部显示器的内容。所有其他的窗口由系统创建。
创建和配置UIWindow
通过xib来创建,通过mainwindow.xib文件加载进行实例化
//创建一个全屏的window
self.window = [[[UIWindow alloc] initWithFrame: [UIScreen mainScreen] bounds] autorelease];
//把viewController设置为window的根控制器
selft.window.rootViewController = self.viewController;
//显示window
[self.window makeKeyAndVisible];
UIScreen对象可以充当IOS设备物理屏幕的替代者。
[UIScreen mainScreen] bounds]用来获取屏幕大小,解决一些尺寸适配的问题。
获取当前UIWindow级别
通过UIApplication获取keyWindow
keyWindow用来管理键盘和非触摸类的消息,并且只能有一个window是keyWindow。
UIWindow * keyWindow = [UIApplication shareApplication].keyWindow;
每个UIWindow配置windowLevel属性,分为3个级别,类似于窗口的z轴优先级,分别为:
UIWindowLevelAlert > UiWindowLevelStatusBar > UIWindowLevelNormal
视图UIView
视图,通常就是UIView的一个对象,表示屏幕上的一块矩形区域,同时处理该区域的绘制和触屏事件。
一个视图可以作为其他视图的父视图,来管理子视图的位置和大小。
视图结构和相关函数
CGPoint point = CGPointMake(x,y);//位置
CGSize size = CGSizeMake(width, height);//大小
CGRect rect = CGRectMake(x,y,width,height);//位置和大小
IOS坐标系统,左上角为原点。
每一个view的frame所用的坐标系是父视图的左上角为原点。
相对于frame,bounds是以ios系统坐标原点为起点,坐标为(0,0)
center,表示视图中心点所在的位置,此属性可以改变视图的位置。
当改变frame,bounds,center其中一个值时,另外两个值相应会变化。
Screens, Windows, and Views 创建可视化界面
类的继承关系
创建UIView
xib方式
NSBundle *bundle = [NSBundle mainBundle];
NSArray *arr = [bundle loadNibNamed:@"myView"
owner: self
options: nil];
UIView *myView = [arr objectAtIndex: 0];
CGRect rect = CGRectMake(0, 0, 100, 100);
UIView *myView = [[UIView alloc] initWithFrame: rect];
UIView的常用方法
当调用addSubView的时候,会对其进行保留,理解为retain一个对象就可以,当调用removefromSuperview时候,会进行释放,也就是release。
1、添加视图
insertSubview:atIndex: //放在子视图数组的具体索引位置
insertSubview:aboveSubview: //某个子视图前面
insertSubview:aboveSubview: //某个子视图前面
2、重新排序和删除子视图
[parentView exchangeSubviewAtIndex:i withSubviewAtIndex:j]//交换两个视图的位置
bringSubviewToFront:和sendSubviewToBack://将子视图提前活置后
[childView removeSuperview]//删除某个视图的子视图
3、视图回调
某个视图的层次一改变,该视图就会收到一次回调。
a、调用addSubivew:成功后会给该视图发送didAddSubivew:回调,触发UIView的子类在心增视图时执行其他操作。
b、didMoveToSuperview:会通知相关视图他们的上级视图已经变化。
c、视图移动前会发出willMoveToSuperview:回调
d、didMoveToWindow:回调和didMoveToSuperview:相似,从命名上能看出其区别。
e、willMoveToWindow:在视图移动前发出的回调。
f、willRemoveToSubview:回调通知父视图子视图即将被删除
UIView掌管直接屏幕绘图。他的drawRect:方法提供一种低级方式来直接绘制内容,允许使用Quartz 2D调用创建和显示任意元素,可将这两个元素结合起来共同构建具体、可操作的界面。
视图对象的清理
如果手动创建了一个视图,分配了任何内存,存储了任何对象的引用,都需要进行资源释放,必须实现dealloc方法。当某个对象引用基数为0,系统会调用其dealloc方法,去释放对象资源,切记不要手动调用dealloc方法。
-(void) dealloc
{
//释放自定义对象
[super dealloc];
}
UIView的可以实现几个基本的动画,平移,旋转,透明度设置,缩放,和android基本是一致的。