您的位置:首页 > 产品设计 > UI/UE

窗口与视图UIScreen and UIView

2015-08-11 20:30 447 查看
UIKit框架结构

·UIKit是一个提供了在iOS上实现图形,事件驱动程序的

框架

UIView是视图的基类

UIViewController视图控制器的基类

UIResponder 表示一个可以接受触摸屏上的触摸事件的对象。

窗口是视图的一个子类。窗口的主要功能:一是提供一个区域来显示视图,二是将事件

(event)分发给视图。一个应用通常只有一个窗口,但也有例外。

窗口与视图

在iOS中,使用窗口与视图在屏幕上显示应用程序的内容。窗口本身不具有任何可见

的内容,但它对于应用程序的视图提供一个基本的容器。视图定义你想要用的一些内容

填充的窗口的一部分。例如,可能显示图像、 文本、 形状或某种组合的视图。还可以使

用视图来组织和管理的其他视图。

窗口

什么是窗口?

·每个应用程序至少需要一个窗口,通常窗口用UIWindow类的实例来表示。注意

UIWindow继承自UIView。

·window对象有以下职责:

·它包含了应用程序的可视化的内容

·它为视图和其他应用程序对象在触摸事件中提供了关键性的作用

·它与视图控制器一起协作来呈现数据

大多数iOS应用程序在其生命周期内只有一个UIWindow。并且在应用程序的生命周期中,窗口跨越

整个设备的主屏幕和从应用程序的主 nib 文件被加载 (或以编程方式创建)。但是,如果应用程序支持

的外部显示器使用的视频输出,它可以创建额外的窗口,以显示该外部显示器上的内容。所有其他的窗口

通常由系统创建,并且通常在响应特定的事件的时候创建的,如传入的电话呼叫。

创建和配置UIWindow

·手动创建(xcode4.5默认)

·通过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

·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万色显示效果是最好的。

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成分。



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表示视图中心点所在的位置,设置此属性可改变视图的位置

·当你设置了三者中的某一个的时候,其他两个的值会相应变化

请注意:缺省情况下,视图的边框并不会

被父视图的边框裁剪。如果您希望让一个

视图裁剪其子视图,需要将其

clipsToBounds属性设置为YES。



创建UIView

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

通过xib的⽅式来创建视图对象

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];

视图的层次结构

·UIView层次结构可以理解为“视图树”——
view hierarchy

·一个视图就是一个容器,当一个视图包含其他视图的时候,两个视图之间就建立了一

个父子关系。被包含的视图被称为”子视图(subview)”,包含的视图称为”父视图或

超视图(superview)“

·从视觉上看,子视图隐藏了父视图的内容,设置透明属性可以看到父视图的内容。

·每个父视图都有一个有序的数组存储着它的子视图,存储的顺序就会影响到每个子视

图的显示效果,比如:两个兄弟视图重叠在一起,后来被加入的视图就出现在另外的上面

·一个视图可以嵌入多个subview,但是只能有一个superview

UIView的常用方法

视图的常用方法

当调用addSubview的时候,会对其进行保留,理解为retain一个对象就可以,当

调用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

方法来确定当前是否激活动画。



填充属性
@property(nonatomic) UIViewContentMode contentMode

可选方式有:
typedef enum

{ UIViewContentModeScaleToFill,

UIViewContentModeScaleAspectFit,

UIViewContentModeScaleAspectFill,

UIViewContentModeRedraw,

UIViewContentModeCenter,

UIViewContentModeTop,

UIViewContentModeBottom,

UIViewContentModeLeft,

UIViewContentModeRight,

UIViewContentModeTopLeft,

UIViewContentModeTopRight,

UIViewContentModeBottomLeft,

UIViewContentModeBottomRight,

} UIViewContentMode;

部分效果如上图所示。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: