UIKit框架结构
框架
UIView是视图的基类
UIViewController视图控制器的基类
UIResponder 表示一个可以接受触摸屏上的触摸事件的对象。
窗口是视图的一个子类。窗口的主要功能:一是提供一个区域来显示视图,二是将事件
(event)分发给视图。一个应用通常只有一个窗口,但也有例外。
窗口与视图
的内容,但它对于应用程序的视图提供一个基本的容器。视图定义你想要用的一些内容
填充的窗口的一部分。例如,可能显示图像、 文本、 形状或某种组合的视图。还可以使
用视图来组织和管理的其他视图。
窗口
什么是窗口?
·每个应用程序至少需要一个窗口,通常窗口用UIWindow类的实例来表示。注意
UIWindow继承自UIView。
·window对象有以下职责:
·它包含了应用程序的可视化的内容
·它为视图和其他应用程序对象在触摸事件中提供了关键性的作用
·它与视图控制器一起协作来呈现数据
大多数iOS应用程序在其生命周期内只有一个UIWindow。并且在应用程序的生命周期中,窗口跨越
整个设备的主屏幕和从应用程序的主 nib 文件被加载 (或以编程方式创建)。但是,如果应用程序支持
的外部显示器使用的视频输出,它可以创建额外的窗口,以显示该外部显示器上的内容。所有其他的窗口
通常由系统创建,并且通常在响应特定的事件的时候创建的,如传入的电话呼叫。
创建和配置UIWindow
·每个应用程序至少需要一个窗口,通常窗口用UIWindow类的实例来表示。注意
UIWindow继承自UIView。
·window对象有以下职责:
·它包含了应用程序的可视化的内容
·它为视图和其他应用程序对象在触摸事件中提供了关键性的作用
·它与视图控制器一起协作来呈现数据
大多数iOS应用程序在其生命周期内只有一个UIWindow。并且在应用程序的生命周期中,窗口跨越
整个设备的主屏幕和从应用程序的主 nib 文件被加载 (或以编程方式创建)。但是,如果应用程序支持
的外部显示器使用的视频输出,它可以创建额外的窗口,以显示该外部显示器上的内容。所有其他的窗口
通常由系统创建,并且通常在响应特定的事件的时候创建的,如传入的电话呼叫。
·手动创建(xcode4.5默认)
·通过Xib来创建,通过mainWindow.xib文件加载进行实例化
创建和配置UIWindow
·通过Xib来创建,通过mainWindow.xib文件加载进行实例化
创建和配置UIWindow
//创建一个全屏幕的window
self.window= [[[UIWindowalloc]initWithFrame:[[UIScreen
mainScreen]bounds]]autorelease];
//把viewcontroller当做window的跟控制器
self.window.rootViewController=self.viewController;
//显示window
[self.windowmakeKeyAndVisible];
目前最新版xcode默认通过xib创建;
获取当前UIWindow和级别
·通过UIApplication获取当前keyWindow。
·keyWindow是用来管理键盘以及非触摸类的消息,并且只能有一个window是
keyWindow.
·UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
·每个UIWindow对象配置windowLevel属性,大部分时候不应该去改变windowLevel。
·UIWindow有3个级别,对应了3种显示优先级。通过windowLevel设置,优先级为:
UIWindowLevelAlert>UIWindowLevelStatusBar>UIWindowLevelNormal
UIScreen
bounds] 获取设备屏幕大小,如iPhone和iPad的尺寸不一样,如果要做的比
较通用应该使用 UIScreen类来获取尺寸。最新的iPhone5的适配问题!
·虽然iOS支持将一个窗口叠放在其它窗口的上方,但是您的应用程序永远不
应创建多个窗口, 因为会影响事件的传递。
手机屏幕的几个概念
·Resolution: 屏幕分辨率,指屏幕上总共的物理像素点。
·Density: 密度,标示每英寸有多少个显示点。density是以分辨率为基础,即指在固
定分辨率上散开的像素点,也就是说屏幕的density越大。
·ASPECT RATIO :屏幕宽高比例。也就是平时我们说的宽高比为 4:3
·Device-independent pixe: dip,设备无关像素。dip是一种虚拟的像素单位,专门
用来给程序定义UI用
·色阶: 也就是平时我们说的 65536色, 26万色, 1600万色并没有数字看起来差别那么
大,这实际上只是表示相邻的三个色阶而已,当然, 1600万色显示效果是最好的。
iOS设备屏幕分辨率
分辨率
·iPhone4前的设备屏幕:320 * 480
·iPhone4、4S设备屏幕:640 * 960
·iPhone5设备屏幕:640*1136
·iPad、iPad2: 1024 * 768
·iPad3、iPad4:2048 * 1536
·iPad mini:1024 * 768
尺寸
·iPhone4、4S: 320 * 480, iPhone5: 320 * 568
·iPad: 1024 * 768
UIView
·视图,大家在iPhone上看到的控件大部分都是UIView的子类。
·视图,通常是UIView的一个对象,表示屏幕上的一块矩形区域,同时处理该区域的
绘制和触屏事件。
·一个视图也可以作为其他视图的父视图,同时决定着这些子视图的位置和大小。
·UIView类做了大量的工作去管理这些内部视图的关系。
·视图同时也是App中MVC模式中的View成分。
![](https://img-blog.csdn.net/20150811201225636)
ios坐标系统
·iPhone的视图坐标系是以左上角为原点
·每一个view的frame所使用的坐标系以它的父视图的
左上角为原点
·iPad: 1024 * 768
UIView
·视图,大家在iPhone上看到的控件大部分都是UIView的子类。
·视图,通常是UIView的一个对象,表示屏幕上的一块矩形区域,同时处理该区域的
绘制和触屏事件。
·一个视图也可以作为其他视图的父视图,同时决定着这些子视图的位置和大小。
·UIView类做了大量的工作去管理这些内部视图的关系。
·视图同时也是App中MVC模式中的View成分。
ios坐标系统
·iPhone的视图坐标系是以左上角为原点
·每一个view的frame所使用的坐标系以它的父视图的
左上角为原点
·视图结构和相关函数
CGPoint point = CGPointMake(x,y); //位置
CGSize size = CGSizeMake(width,height); //大小
CGRect rect = CGRectMake(x,y,width,height); //
位置和大小
Frame和Bounds
·Bounds即以iOS系统的坐标原点为起点,坐标是(0,0)
·Center表示视图中心点所在的位置,设置此属性可改变视图的位置
·当你设置了三者中的某一个的时候,其他两个的值会相应变化
请注意:缺省情况下,视图的边框并不会
被父视图的边框裁剪。如果您希望让一个
视图裁剪其子视图,需要将其
clipsToBounds属性设置为YES。
创建UIView
NSBundle *bundle = [NSBundle mainBundle];
NSArray *arr = [bundleloadNibNamed:@"myView"owner:self
options:nil];
UIView *myView = [arrobjectAtIndex:0];
代码创建视图对象
CGRect viewRect = CGRectMake(0,0,100, 100);
UIView *myView = [[UIViewalloc]initWithFrame:viewRect];
视图的层次结构
·一个视图就是一个容器,当一个视图包含其他视图的时候,两个视图之间就建立了一
个父子关系。被包含的视图被称为”子视图(subview)”,包含的视图称为”父视图或
超视图(superview)“
·从视觉上看,子视图隐藏了父视图的内容,设置透明属性可以看到父视图的内容。
·每个父视图都有一个有序的数组存储着它的子视图,存储的顺序就会影响到每个子视
图的显示效果,比如:两个兄弟视图重叠在一起,后来被加入的视图就出现在另外的上面
·一个视图可以嵌入多个subview,但是只能有一个superview
UIView的常用方法
视图的常用方法
调用removeFromSuperview的时候,会对释放,也就是release。
基本的添加和删除子视图
addSubview: // 添加子视图
insertSubview:atIndex: // 视图插入到指定索引位置
insertSubview:aboveSubview: // 视图插入指定视图之上
insertSubview:belowSubview: // 视图插入指定视图之下
bringSubviewToFront: // 把视图移动到最顶层
sendSubviewToBack: // 把视图移动到最底层
exchangeSubviewAtIndex:withSubviewAtIndex //把两个索引对应的视图调
换位置
removeFromSuperview // 把视图从父视图中移除
查找子视图
·UIView类中有一个tag属性,通过这个tag属性可以标示一个视图对象(整数)
·获取的方法, viewWithTag: 方法来检索标示过的子视图
UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)];
myView.tag = 100;
[self.viewaddSubview:myView];
// 通过tag值查找view
UIView myView = [self.view viewWithTag:100];
UIView的常用属性
·alpha //透明度
·backgroundColor //背景颜色
·subViews //子视图集合
·hidden //是否隐藏
·tag //标签值
·superview //父视图
·multipleTouchEnabled //是否开启多点触摸
·userInteractionEnabled //是否响应触摸事件
坐标系统变换
·坐标系统变换通过transform属性来改变
·CGAffineTransformScale 对视图比例缩放
·CGAffineTransformRotate 对视图做变焦旋转
·CGAffineTransformTranslate 对视图在原来的位置上做平移
坐标系统变换
仿射变换
CGAffineTransform transform = rootView.transform;
rootView.transform = CGAffineTransformScale(transform,0.5,0.5);
rootView.transform = CGAffineTransformRotate(transform,0.33);
rootView.transform = CGAffineTransformTranslate(transform,100,100);
UIView属性的动画
·UIView类的很多属性都被设计为动画。动画的属性是指当属性从一个值变为另一个值的时候,可以半自
动地支持动画。您仍然必须告诉UIKit希望执行什么类型的动画,但是动画一旦开始,Core Animation就
会全权负责。UIView对象中支持动画的属性有如下几个:
·frame - 你可以使用这个来动画的改变视图的尺寸和位置
·bounds - 使用这个可以动画的改变视图的尺寸
·center - 使用这个可以动画的改变视图的位置
·transform - 使用这个可以翻转或者放缩视图
·alpha - 使用这个可以改变视图的透明度
·backgroundColor- 使用这个可以改变视图的背景颜⾊
·contentStetch -使用这个可以改变视图内容如何拉伸
配置动画委托
·可以为动画分配一个委托,并通过该委托接受动画开始和结束的消息。当需要在动画开始前和动画结束
后立即执行其它任务时,可能就需要设置委托。
·通过UIView调用setAnimationDelegate:方法来设置委托,并通过setAnimationWillStartSelector:和
setAnimationDidStopSelector:方法来指定接收消息的选择器方法。消息处理方法的形式如下:
- (void)animationWillStart:(NSString *)animationID context:(void *)context;
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void
*)context;
上面两个方法的animationID和context参数和动画块开始时传给beginAnimations:context:方法的参数相
同:
·animationID - 应用程序提供的字符串,用于标识一个动画块中的动画。
·context - 也是应用程序提供的对象,用于向委托对象传递额外的信息。
setAnimationDidStopSelector:选择器方法还有一个参数—即一个布尔值。如果动画顺利完成,没有被其它
动画取消或停止,则该值为YES。
配置动画的参数
·用setAnimationStartDate:方法来设置动画在commitAnimations方法返回之后的发生日期。
·用setAnimationDelay:方法来设置实际发生动画和commitAnimations方法返回的时间点之间的间隔
·用setAnimationDuration:方法来设置动画持续的秒数。
·用setAnimationCurve:方法来设置动画过程的相对速度,比如动画可能在启示阶段逐渐加速,而在结
束阶段逐渐减速,或者整个过程都保持相同的速度
·用setAnimationRepeatCount:方法来设置动画的重复次数。
·用setAnimationRepeatAutoreverses:方法来指定动画在到达目标值时是否自动反向播放。您可以结
合使用这个方法和setAnimationRepeatCount:方法,使各个属性在初始值和目标值之间平滑切换一段时
间。
·缺省情况下,所有支持动画的属性在动画块中发生的变化都会形成动画。如果您希望让动画块中发生的
某些变化不产生动画效果,可以通过setAnimationsEnabled:方法来暂时禁止动画,在完成修改后才重新
激活动画。在调用setAnimationsEnabled:方法并传入NO值之后,所有的改变都不会产生动画效果,直
到用YES值再次调用这个方法或者提交整个动画块时,动画才会恢复。您可以用areAnimationsEnabled
方法来确定当前是否激活动画。
·获取的方法, viewWithTag: 方法来检索标示过的子视图
UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)];
myView.tag = 100;
[self.viewaddSubview:myView];
// 通过tag值查找view
UIView myView = [self.view viewWithTag:100];
UIView的常用属性
·alpha //透明度
·backgroundColor //背景颜色
·subViews //子视图集合
·hidden //是否隐藏
·tag //标签值
·superview //父视图
·multipleTouchEnabled //是否开启多点触摸
·userInteractionEnabled //是否响应触摸事件
坐标系统变换
·坐标系统变换通过transform属性来改变
·CGAffineTransformScale 对视图比例缩放
·CGAffineTransformRotate 对视图做变焦旋转
·CGAffineTransformTranslate 对视图在原来的位置上做平移
坐标系统变换
仿射变换
CGAffineTransform transform = rootView.transform;
rootView.transform = CGAffineTransformScale(transform,0.5,0.5);
rootView.transform = CGAffineTransformRotate(transform,0.33);
rootView.transform = CGAffineTransformTranslate(transform,100,100);
UIView属性的动画
·UIView类的很多属性都被设计为动画。动画的属性是指当属性从一个值变为另一个值的时候,可以半自
动地支持动画。您仍然必须告诉UIKit希望执行什么类型的动画,但是动画一旦开始,Core Animation就
会全权负责。UIView对象中支持动画的属性有如下几个:
·frame - 你可以使用这个来动画的改变视图的尺寸和位置
·bounds - 使用这个可以动画的改变视图的尺寸
·center - 使用这个可以动画的改变视图的位置
·transform - 使用这个可以翻转或者放缩视图
·alpha - 使用这个可以改变视图的透明度
·backgroundColor- 使用这个可以改变视图的背景颜⾊
·contentStetch -使用这个可以改变视图内容如何拉伸
配置动画委托
·可以为动画分配一个委托,并通过该委托接受动画开始和结束的消息。当需要在动画开始前和动画结束
后立即执行其它任务时,可能就需要设置委托。
·通过UIView调用setAnimationDelegate:方法来设置委托,并通过setAnimationWillStartSelector:和
setAnimationDidStopSelector:方法来指定接收消息的选择器方法。消息处理方法的形式如下:
- (void)animationWillStart:(NSString *)animationID context:(void *)context;
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void
*)context;
上面两个方法的animationID和context参数和动画块开始时传给beginAnimations:context:方法的参数相
同:
·animationID - 应用程序提供的字符串,用于标识一个动画块中的动画。
·context - 也是应用程序提供的对象,用于向委托对象传递额外的信息。
setAnimationDidStopSelector:选择器方法还有一个参数—即一个布尔值。如果动画顺利完成,没有被其它
动画取消或停止,则该值为YES。
配置动画的参数
·用setAnimationStartDate:方法来设置动画在commitAnimations方法返回之后的发生日期。
·用setAnimationDelay:方法来设置实际发生动画和commitAnimations方法返回的时间点之间的间隔
·用setAnimationDuration:方法来设置动画持续的秒数。
·用setAnimationCurve:方法来设置动画过程的相对速度,比如动画可能在启示阶段逐渐加速,而在结
束阶段逐渐减速,或者整个过程都保持相同的速度
·用setAnimationRepeatCount:方法来设置动画的重复次数。
·用setAnimationRepeatAutoreverses:方法来指定动画在到达目标值时是否自动反向播放。您可以结
合使用这个方法和setAnimationRepeatCount:方法,使各个属性在初始值和目标值之间平滑切换一段时
间。
·缺省情况下,所有支持动画的属性在动画块中发生的变化都会形成动画。如果您希望让动画块中发生的
某些变化不产生动画效果,可以通过setAnimationsEnabled:方法来暂时禁止动画,在完成修改后才重新
激活动画。在调用setAnimationsEnabled:方法并传入NO值之后,所有的改变都不会产生动画效果,直
到用YES值再次调用这个方法或者提交整个动画块时,动画才会恢复。您可以用areAnimationsEnabled
方法来确定当前是否激活动画。
填充属性
@property(nonatomic) UIViewContentMode contentMode
可选方式有:
typedef enum
{ UIViewContentModeScaleToFill,
UIViewContentModeScaleAspectFit,
UIViewContentModeScaleAspectFill,
UIViewContentModeRedraw,
UIViewContentModeCenter,
UIViewContentModeTop,
UIViewContentModeBottom,
UIViewContentModeLeft,
UIViewContentModeRight,
UIViewContentModeTopLeft,
UIViewContentModeTopRight,
UIViewContentModeBottomLeft,
UIViewContentModeBottomRight,
} UIViewContentMode;
{ UIViewContentModeScaleToFill,
UIViewContentModeScaleAspectFit,
UIViewContentModeScaleAspectFill,
UIViewContentModeRedraw,
UIViewContentModeCenter,
UIViewContentModeTop,
UIViewContentModeBottom,
UIViewContentModeLeft,
UIViewContentModeRight,
UIViewContentModeTopLeft,
UIViewContentModeTopRight,
UIViewContentModeBottomLeft,
UIViewContentModeBottomRight,
} UIViewContentMode;
部分效果如上图所示。