视图与窗口的基础

来源:互联网 发布:昆山远洋数据招聘信息 编辑:程序博客网 时间:2024/06/02 04:17

UIKIT框架结构

·UIKit是一个提供了在iOS上实现图形,事件驱动程序的框架
UIView是视图的基类
UIViewController视图控制器的基类
UIResponder 表示一个可以接受触摸屏上的触摸事件的对象。 窗口是视图的一个子类。窗口的主要功能:一是提供一个区域来显示视图,二是将事件 (event)分发给视图。一个应用通常只有一个窗口,但也有例外。


窗口与视图

在iOS中,使用窗口与视图在屏幕上显示应用程序的内容。窗口本身不具有任何可见 的内容,但它对于应用程序的视图提供一个基本的容器。视图定义你想要用的一些内容 填充的窗口的一部分。例如,可能显示图像、 文本、 形状或某种组合的视图。还可以使 用视图来组织和管理的其他视图。


·什么是窗口?
·每个应用程序至少需要一个窗口,通常窗口用UIWindow类的实例来表示。注意 UIWindow继承自UIView。
·window对象有以下职责:
·它包含了应用程序的可视化的内容 ·它为视图和其他应用程序对象在触摸事件中提供了关键性的作用 ·它与视图控制器一起协作来呈现数据
大多数iOS应用程序在其生命周期内只有一个UIWindow。并且在应用程序的生命周期中,窗口跨越 整个设备的主屏幕和从应用程序的主 nib 文件被加载 (或以编程方式创建)。但是,如果应用程序支持 的外部显示器使用的视频输出,它可以创建额外的窗口,以显示该外部显示器上的内容。所有其他的窗口 通常由系统创建,并且通常在响应特定的事件的时候创建的,如传入的电话呼叫。


创建和配置UIWindow

·手动创建(xcode4.5默认)
·通过Xib来创建,通过mainWindow.xib文件加载进行实例化

// 创建一个全屏幕的windowself.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];//把viewcontroller当做window的跟控制器 self.window.rootViewController = self.viewController; //显示window[self.window makeKeyAndVisible];

UIScreen

·UIScreen对象可以充当ios设备物理屏幕的替代者,[UIScreen mainScreen]
bounds] 获取设备屏幕大小,如iPhone和iPad的尺寸不一样,如果要做的比 较通用应该使用 UIScreen类来获取尺寸。最新的iPhone5的适配问题!
·虽然iOS支持将一个窗口叠放在其它窗口的上方,但是您的应用程序永远不 应创建多个窗口, 因为会影响事件的传递。


手机屏幕的几个概念

·Screen size: 屏幕尺寸,指具体的屏幕物理长度,以屏幕对角线的长度作为标示。
·Resolution: 屏幕分辨率,指屏幕上总共的物理像素点。
·Density:密度,标示每英寸有多少个显示点。density是以分辨率为基础,即指在固 定分辨率上散开的像素点,也就是说屏幕的density越大。
·ASPECT RATIO :屏幕宽高比例。也就是平时我们说的宽高比为 4:3 ·Device-independent pixe: dip,设备无关像素。dip是一种虚拟的像素单位,专门用来给程序定义UI用
·色阶: 也就是平时我们说的 65536色, 26万色, 1600万色并没有数字看起来差别那么 大,这实际上只是表示相邻的三个色阶而已,当然, 1600万色显示效果是最好的。


iPhone屏幕尺寸

·iPhone4前的设备屏幕:320 * 480 
·iPhone4、4S设备屏幕:640 * 960 
·iPhone5设备屏幕:640*1136 
·iPad、iPad2: 1024 * 768 
·iPad3、iPad4:2048 * 1536 
·iPad mini:1024 * 768


获取当前UIWindow和级别

·通过UIApplication获取当前keyWindow。
·keyWindow是用来管理键盘以及非触摸类的消息,并且只能有一个window是 keyWindow.
·UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
·每个UIWindow对象配置windowLevel属性,大部分时候不应该去改变 windowLevel。
·UIWindow有3个级别,对应了3种显示优先级。通过windowLevel设置,优先级为: UIWindowLevelAlert>UIWindowLevelStatusBar>UIWindowLevelNormal


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

·Frame以其父视图为起点,得出它自己的位置信息
·Bounds即以iOS系统的坐标原点为起点,坐标是(0,0)
·Center表示视图中心点所在的位置,设置此属性可改变视图的位置
·当你设置了三者中的某一个的时候,其他两个的值会相应变化





创建UIView

·创建视图UI有两种方式,xib文件和代码创建。

// 通过xib的方式来创建视图对象NSBundle *bundle = [NSBundle mainBundle];NSArray *arr = [bundle loadNibNamed:@"myView" owner:selfoptions:nil]; UIView *myView = [arr objectAtIndex:0];

// 代码创建视图对象CGRect  viewRect = CGRectMake(0, 0, 100, 100);UIView *myView = [[UIView alloc] initWithFrame:viewRect];

视图的层次结构

·UIView层次结构可以理解为“视图树”—— view hierarchy
·一个视图就是一个容器,当一个视图包含其他视图的时候,两个视图之间就建立了一 个父子关系。被包含的视图被称为”子视图(subview)”,包含的视图称为”父视图或 超视图(superview)“
·从视觉上看,子视图隐藏了父视图的内容,设置透明属性可以看到父视图的内容。
·每个父视图都有一个有序的数组存储着它的子视图,存储的顺序就会影响到每个子视 图的显示效果,比如:两个兄弟视图重叠在一起,后来被加入的视图就出现在另外的上面
·一个视图可以嵌入多个subview,但是只能有一个superview


UIView的常用方法

·视图的常用方法

当调用addSubview的时候,会对其进行保留,理解为retain⼀一个对象就可以,当 调用removeFraomSuperview的时候,会对释放,也就是release。


基本的添加和删除子视图
addSubview: // 添加子视图
insertSubview:atIndex: // 视图插入到指定索引位置
insertSubview:aboveSubview: // 视图插入指定视图之上
insertSubview:belowSubview: // 视图插入指定视图之下
bringSubviewToFront: // 把视图移动到最顶层
sendSubviewToBack: // 把视图移动到最底层
exchangeSubviewAtIndex:withSubviewAtIndex //把两个索引对应的视图调 换位置
removeFromSuperview // 把视图从父视图中移除


查找视图

·UIView类中有一个tag属性,通过这个tag属性可以标示一个视图对象(整数) 

·获取的方法, viewWithTag: 方法来检索标示过的子视图

UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0,100)];myView.tag = 100;[self.view addSubview:myView];// 通过tag值查找viewUIView myView = [self.view viewWithTag:100];

UIView的常用属性

·alpha //透明度 
·backgroundColor //背景颜色 
·subViews //子视图集合 
·hidden //是否隐藏
·tag //标签值 
·superview //父视图 
·multipleTouchEnabled //是否开启多点触摸 
·userInteractionEnabled //是否响应触摸事件


自定义UIView

- (id)initWithFrame:(CGRect)aRect { self = [super initWithFrame:aRect];if (self) {// setup the initial properties of the view }return self; }

视图对象的清理

·如果手动创建了一个视图,分配了任何内存、存储了任何对象的引用,都需要释放资 源,必须实现dealloc方法。当某个对象的引用计数为0,系统会调用其dealloc方法,去 释放对象资源,切记不要手动调用dealloc方法。

- (void) dealloc{//释放自定义的对象    [super dealloc];}

坐标系统变换

·坐标系统变换通过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);

视图的内容模式

视图的contentMode属性决定了边界变化和缩放操作,效果如下图:




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方法来确定当前是否激活动画。



0 0
原创粉丝点击