UiView与UIWindow的详解

一,窗口与视图

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

窗口

·什么是窗口?

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

·window对象有以下职责:

·它包含了应用程序的可视化的内容 ·它为视图和其他应用程序对象在触摸事件中提供了关键性的作用 ·它与视图控制器一起协作来呈现数据

大多数iOS应用程序在其生命周期内只有一个UIWindow。并且在应用程序的生命周期中,窗口跨越 整个设备的主屏幕和从应用程序的主 nib 文件被加载 (或以编程方式创建)。但是,如果应用程序支持 的外部显示器使用的视频输出,它可以创建额外的窗口,以显示该外部显示器上的内容。所有其他的窗口 通常由系统创建,并且通常在响应特定的事件的时候创建的,如传入的电话呼叫。

2.创建和配置UIWindow

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

 3.获取当前UIWindow和级别

·通过UIApplication获取当前keyWindow。

·keyWindow是用来管理键盘以及非触摸类的消息,并且只能有一个window是 keyWindow.

·UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow; ·每个UIWindow对象配置windowLevel属性,大部分时候不应该去改变windowLevel。

·UIWindow有3个级别,对应了3种显示优先级。通过windowLevel设置,优先级为: UIWindowLevelAlert>UIWindowLevelStatusBar>UIWindowLevelNormal

二.UIScreen

1.UIScreen对象可以充当ios设备物理屏幕的替代者,[UIScreen mainScreen] bounds] 获取设备屏幕大小,如iPhone和iPad的尺寸不一样,如果要做的比

较通用应该使用 UIScreen类来获取尺寸。最新的iPhone5的适配问题!

2.虽然iOS支持将一个窗口叠放在其它窗口的上方,但是您的应用程序永远不 应创建多个窗口, 因为会影响事件的传递。

3.手机屏幕的几个概念

·Screen size: 屏幕尺寸,指具体的屏幕物理长度,以屏幕对角线的长度作为标示。

·Resolution: 屏幕分辨率,指屏幕上总共的物理像素点。

·Density:密度,标示每英寸有多少个显示点。density是以分辨率为基础,即指在固 定分辨率上散开的像素点,也就是说屏幕的density越大。

·ASPECT RATIO :屏幕宽高比例。也就是平时我们说的宽高比为 4:3 ·Device-independent pixe: dip,设备无关像素。dip是一种虚拟的像素单位,专门

用来给程序定义UI用

·色阶: 也就是平时我们说的 65536色, 26万色, 1600万色并没有数字看起来差别那么 大,这实际上只是表示相邻的三个色阶而已,当然, 1600万色显示效果是最好的。

 

三.UIView

 UIView表示屏幕上的一块矩形区域,它在App中占有绝对重要的地位,因为IOS中几乎所有可视化控件都是UIView的子类。

负责渲染区域的内容,并且响应该区域内发生的触摸事件

 UIView的功能 :

1.管理矩形区域里的内容

2.处理矩形区域中的事件

3.子视图的管理

4.还能实现动画  UIView的子类也具有这些功能

 下图就是视图的内层次

                                        

5.视图结构和相关函数

CGPoint point = CGPointMake(x,y); //位置

CGSize size = CGSizeMake(width,height); //大小

CGRect rect = CGRectMake(x,y,width,height); // 位置和大小

6.创建View

  //视图
    UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(20, 20, 40, 200)];
    view1.backgroundColor = [UIColor whiteColor];
   // view1.clipsToBounds=YES;
    [self.window addSubview:view1];

 

7. View的常用属性:

·alpha //透明度

·backgroundColor //背景颜色UIColor

·subViews      //子视图集合NSArray

·hidden         //是否隐藏BOOl

·tag             //标签值

·superview   //父视图UIView

·clipsToBound  //去掉超出视图的部分BOOL

·multipleTouchEnabled  //是否开启多点触摸BOOL

·userInteractionEnabled //是否响应触摸事件BOOL 

8.坐标系统变换通过transform属性来改变

·CGAffineTransformScale 对视图比例缩放

·CGAffineTransformRotate 对视图做变焦旋转

·CGAffineTransformTranslate 对视图在原来的位置上做平移

·CGAffineTransformIdentity 还原到视图最初的状态 

//放大
- (IBAction)enlarge:(id)sender { CGAffineTransform t = _ColorView.transform; _ColorView.transform = CGAffineTransformScale(t, 1.2,1.2); } //缩小 - (IBAction)narrow:(id)sender { CGAffineTransform t = _ColorView.transform; _ColorView.transform = CGAffineTransformScale(t,0.7,0.7); } //旋转 - (IBAction)rotate:(id)sender { CGAffineTransform t = _ColorView.transform; _ColorView.transform = CGAffineTransformRotate(t,M_PI/18); }
//还原 - (IBAction)reduction:(UIButton *)sender { // CGAffineTransform t = _ColorView.transform; _ColorView.transform = CGAffineTransformIdentity; } //平移 - (IBAction)translation:(UIButton *)sender { CGAffineTransform t = _ColorView.transform; _ColorView.transform = CGAffineTransformTranslate(t, 20, 20); }

9.视图动画

UIView对象中支持动画的属性有如下几个:

  • frame - 你可以使用这个来动画的改变视图的尺寸和位置
  • bounds - 使用这个可以动画的改变视图的尺寸
  • center - 使用这个可以动画的改变视图的位置
  • transform - 使用这个可以翻转或者放缩视图
  • alpha - 使用这个可以改变视图的透明度
  • backgroundColor - 使用这个可以改变视图的背景颜色
  • contentStetch -  使用这个可以改变视图内容如何拉伸

步骤:

1)开始并设计动画

   [UIView beginAnimations:nil context:nil];
     //每次动画持续多少秒
   [UIView setAnimationBeginsFromCurrentState:10];
   //设置重复次数
   [UIView setAnimationRepeatCount:1];

 2)要用动画来做什么事情

    CGAffineTransform t = self.tuview.transform;
    self.tuview.transform = CGAffineTransformScale(t,100, 100);
    self.tuview.center = self.view.center;
    self.tuview.transform = CGAffineTransformRotate(t,M_PI/4); 
    self.tuview.alpha = 0.1;

 3)提交画面

[UIView commitAnimations];

 

 

 

 

 

 

 

 

 

 

 

 
posted @ 2016-08-08 22:27  我的蜡笔小新  阅读(815)  评论(0编辑  收藏  举报