UIView详解

守給你的承諾、 提交于 2020-02-21 07:56:04

UIView表示屏幕上的一块矩形区域, 同时处理该区域的绘制和触摸事件

UIView在我们APP开发中占有非常重要的地位, 因为我们在iPhone上看到的绝大部分视图控件都是UIView的子类

一个视图可以作为其它视图的父视图, 同时决定着它的子视图的位置及大小

下图为UIKit的层级关系:

 

要知道UIView的知道必须了解如下内容:

一.三个结构体CGRect, CGSize, CGPoint

struct CGRect {

    CGPoint origin;//位置

    CGSize size;//大小

};

typedef struct CGRect CGRect;

 

struct CGSize {

    CGFloat width;//宽

    CGFloat height;//高

};

typedef struct CGSize CGSize;

 

struct CGPoint {

    CGFloat x;//x点的位置

    CGFloat y;//y点的位置

};

typedef struct CGPoint CGPoint;

 

二.Frame, Bounds, Center

1.Frame和Center都是相对于父视图的, bounds是相对于自身的

2.Frame定义了一个视图的位置和大小, 是CGRect类型的变量, 改变视图的Frame会改变Center

3.Center定义了一个视图中心点的位置, 是CGPoint类型的变量, 改变视图的Center也会改变Frame中的origin所对应的位置

4.Bounds同样定义了一个视图的位置和大小, 是CGRect类型的变量, 但是告诉子视图的位置是从子视图的父视图的原点(0,0)位置开始的

        

 

三.UIScreen(屏幕), UIWindow(窗口), UIView(视图)

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

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

window对象有以下职责:

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

大多数iOS应用程序在其生命周期内只有一个UIWindow. 虽然iOS支持将一个窗口叠放在其它窗口的上方,但是您的应用程序永远不应创建多个窗口, 因为会影响事件的传递。

3.UIView视图,大家在iPhone上看到的控件大部分都是UIView的子类。

视图,通常是UIView的一个对象,表示屏幕上的一块矩形区域,同时处理该区域的绘制和触屏事件。

一个视图也可以作为其他视图的父视图,同时决定着这些子视图的位置和大小。

UIView类做了大量的工作去管理这些内部视图的关系。

视图同时也是App中MVC模式中的View成分。

 

四.创建View

 //通过加载xib文件的方式创建视图

 NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"WhiteView" owner:self options:nil];

 UIView *nibView_white = [views lastObject];

 [self.window addSubview:nibView_white];

 

    //通过代码的方式创建视图

    UIView *whiteView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 200, 200)];

    [self.window addSubview:whiteView];

 

 一个视图就是一个容器,当一个视图包含其他视图的时候,两个视图之间就建立了一个父子关系。被包含的视图被称为"子视图(subview)",包含的视图称为"父视图或超视图(superview)"。一个视图可以嵌入多个subview,但是只能有一个superview。

 

五.UIView的常用属性和方法

1.常用属性

alpha                      //透明度

backgroundColor     //背景颜色UIColor

subViews                //子视图集合NSArray

hidden                    //是否隐藏BOOL

tag                         //标签值

superview               //父视图UIView

clipsToBounds         //去掉超出视图的部分BOOL

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

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

 

2.基本的添加和删除子视图

addSubview:                     // 添加子视图

insertSubview:atIndex:        // 视图插入到指定索引位置

insertSubview:aboveSubview:  // 视图插入指定视图之上

insertSubview:belowSubview:  // 视图插入指定视图之下

bringSubviewToFront:           // 把视图移动到最顶层

sendSubviewToBack:            // 把视图移动到最底层

exchangeSubviewAtIndex:withSubviewAtIndex: //把两个索引对应的视图调换位置

removeFromSuperview        // 把视图从父视图中移除

viewWithTag:          // 通过tag值查找view

 

3.视图图型的转换

CGAffineTransformScale       对视图比例缩放

CGAffineTransformRotate     对视图做变焦旋转

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

CGAffineTransformIdentity     还原到视图最初的状态

 

  //通过transform属性来改变

    CGAffineTransform t = _view.transform;

  //1.放大scale

    _view.transform = CGAffineTransformScale(t, 1.2, 1.2);

    //2.缩小scale

    _view.transform = CGAffineTransformScale(t, 0.7, 0.7);

    //3.旋转rotate

    _view.transform = CGAffineTransformRotate(t, M_PI/4);

    //4.平移translate

    _view.transform = CGAffineTransformTranslate(t, 20, 20);

    //5.还原identity

    _view.transform = CGAffineTransformIdentity;

 

五.视图动画

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

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

//1.开始并设置动画

    [UIView beginAnimations:nil context:nil];

    [UIView setAnimationDuration:.5];//第次动画持续多少秒

    [UIView setAnimationRepeatCount:3];//设置重复次数

    [UIView setAnimationDelay:2.];//延迟

    

    //2.要用动画来做什么事情

    _view.transform = CGAffineTransformScale(t, 1.5, 1.5);

    _view.center = self.view.center;

    _view.frame = CGRectMake(100, 260, 100, 100);

    _view.alpha = .3;

    //...

    //3.提交动画

    [UIView commitAnimations];//提交动画

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!