UIView手册中的说明

来源:互联网 发布:mac air windows10 编辑:程序博客网 时间:2024/05/18 06:27

          UIView类定义了一个屏幕上得矩形区域,  以及控制区域内部物件的接口.  在运行时, 一个视图负责渲染其区域内的所有物件,并且捕捉物件的响应.

     UIView类会自动把矩形区域内部填充上自己的背景色.更复杂的构件可以通过继承UIView然后实现响应的绘制代码及时间处理代码.

     UIKit框架包含了很多标准的UIView子类,比如button, 复杂的表.

 

只有UIView的对象是能看见的,所以很重要,主要负责以下功能:

     绘图和动画:

          使用UIKit, Core Graphics,和 OpenGL ES绘制矩形区域内部

          有些属性可以渐变到新值.

 

     控制图层及子视图:

          一个视图可以有0到多个子视图

          每个视图都有自身的默认相对尺寸, 与父视图有关

          一个视图可以重定义其子视图的坐标及尺寸

     

     事件处理:

          视图是UIResponder的子类,  所以可以捕获并处理触碰,晃动事件.

          一个视图可以通过addGestureRecognizer:方法来加载手势识别器来处理基本手势.

 

 

     视图可以嵌入其它视图, 以此来实现复杂的视觉层级. 一般来说,子视图超出父视图的部分不会被裁减掉,但是在iOS中可以通过设置clipsToBounds属性来选择怎么办.

 

     一个视图的几何结构由frame,bounds和center属性决定

 

创建一个视图:

 

     在iOS中,姊妹视图可以覆盖彼此,所以会由复杂的视图层次.后添加的视图会遮盖先添加的视图.通过一些方法可以改变这种层次关系.

 

     当创建一个新的视图的时候,需要给视图的autoresizingMask属性设置一个合适的值,以确保视图能正确调整大小,视图的大小调整主要是由于设备方向改变了.setNeedsLayout方法也会强制视图更新图层.

 

视图的绘制循环:

     视图只在需要的时候绘制.当一个视图第一次出现, 或者当一个视图的一部分因为图层关系改变而变得可见时,   视图会绘制包含的物件.

     对于只包含内置构件的视图(基于UIKit或者Core Graphics),  绘制时会调用drawRect:方法.对于这个方法的实现,  要保证绘制视图的物件到当前图形环境中,  一般drawRect由系统提前调用. 这样就在视图出现前完成了静态可见部分的构造.

     当视图的内容发生变化时,需要通过调用setNeedsDisplay 或者 setNeedsDisplayInRect 方法重新绘制相关区域.  以上方法会使系统在下一个绘制循环中重绘视图的内容.

 

提示:

     如果是使用OpenGLES 绘制的内容, 就需要使用GLKView 类代替UIView类.

 

 

动画效果:

     视图属性的变化过程可以设置为动画效果. 如欲设置需要指出哪个变化需要动画显示.有两种方法设置动画效果:

     1. 在iOS4以后, 可以使用动画效果块函数.

     2.使用begin/commit 动画方法.

 

     基于块的动画函数(animateWithDuration:animations:)大大简化了动画效果的设置难度.只要指定了展示的动画效果及其选项,就可以在方法调用时实现相应效果.但是只能在iOS4.0以后使用.否则就得使用beginAnimations:context: 和 commitAnimations 类方法来标记动画的开始及结束.

 

以下视图的属性改变是可以动漫化的:

     @property frame

     @property bounds

     @property center

     @property transform

     @property alpha

     @property backgroundColor

     @property contentStretch

 

 

多线程:

     对视图的操作都应该在主线程中进行,唯一的例外是视图对象的初始化

 

继承:

     UIView是可视化物件的关键继承节点.  继承时需要调节很多表现.

 

 

需要重写的方法:

     初始化:

     initWithFrame:     推荐子类重写这个方法来实现初始化

     initWithCoder:     如果子类需要从IB nib 文件初始化,需要重写这个方法

     layerClass          

     

     绘制:

     drawRect:     需要绘制内容时才重写这个方法

 

     图层:

     sizeThatFits:     如果视图需要一个合适尺寸就重写

     layoutSubviews

     didAddSubview: , willAddSubview:     

     willMoveToSuperview: , didMoveToSuperview跟踪视图的图层变化

     willMoveToWindow: , didMoveToWindow

 

事件捕获:

     touchesBegan:withEvent:    touchesMoved:withEvent:     touchesEnded:withEvent:

     touchesCancelled:withEvent:

 

      

 


0 0