UIView,也即User Interface View,就是用户界面的意思。毫无疑问,这是与用户关系最密切的一层,也是产品狗们真正关心的地方,所以,对UIView的掌握在很大程度上决定着一个程序猴的“工作能力”。之前也在网络上看到过许多UIView的中文讲解,个人感觉比较零散,在这里,我希望通过自己的努力和学习,将其进行一下更好的汇总。
UIView简介
The UIView class defines a rectangular area on the screen and the interfaces for managing the content in that area. At runtime, a view object handles the rendering of any content in its area and also handles any interactions with that content. The UIView class itself provides basic behavior for filling its rectangular area with a background color. More sophisticated content can be presented by subclassing UIView and implementing the necessary drawing and event-handling code yourself. The UIKit framework also includes a set of standard subclasses that range from simple buttons to complex tables and can be used as-is. For example, a UILabel object draws a text string and a UIImageView object draws an image.
UIView类在屏幕上定义了一个矩形的区域和对这片区域的内容进行管理的接口。从运行时的角度来看,即使用一个对象view来控制这片区域里面内容的渲染和交互的事件。UIView类提供了比较简单的填充区域的方法,比如设置background color。当然,我们也可以通过子类化UIView来提供更复杂的页面渲染和事件处理方法。UIKit框架也提供了一些标准的UIView的子类,从简单的button到复杂的tableview都有定义。
UIView职能
可以这么说,UIView类是一个应用与用户进行交互的最重要的方式,这促成了UIView的多种职能。当然,在本文,不展开介绍每个职能,后面我会专门写三篇或者更多文章来对这几个方面的内容进行介绍。
1. 页面填充和动画
一个view对象通过使用UIKit,Core Graphics或者OpenGL ES来对页面进行填充。
可以通过改变UIView类的一些属性的值来制作动画。
2. 布局和管理子视图
view可以包含任意数量的子视图。
view可以对自身的默认大小进行设定。
view可以设定其子视图的大小和位置。
3. 事件处理
每一个view都是响应者,它可以处理UIResponder定义的所有事件。
view可以使用addGestureRecognizer:方法来添加手势响应者来处理一般的手势。
从层次的角度来看UIView
这里,本文决定以从下到上的方式来分析其模块层次,并以从上到下的方式来分析其对象层次。
1. 模块层次
首先,理清几个常见概念,分别是:Cocoa,Foundation和UIKit。Cocoa不是一种编程语言(它可以运行多种编程语言),它也不是一个开发工具,它是创建iOS程序的原生面向对象API,为这iOS应用提供了编程环境,上图中Foundation和UIKit也是Cocoa提供的框架。当然,也可以轻松看出,Foundation和UIKit分别是Core Service层和Cocoa Touch的主要框架。那么,UIView存在在哪里呢?对,存在于UIKit框架提供的UI系的类里面,属于Cocoa Touch层。
接下来,从下层到上层,依次看一下Cocoa的几个层次。
Core OS是位于iOS系统架构最下面的一层是核心操作系统层,它包括内存管理、文件系统、电源管理以及一些其他的操作系统任务。它可以直接和硬件设备进行交互。作为app开发者不需要与这一层打交道,所以不进行过多的介绍(其实多的我也不清楚)。
Core Services是核心服务层,可以通过它来访问iOS的一些服务。这些服务的关键就是Foundation内核和Foundation框架,它们共同定义了所有app使用的最基本的类型,来为上层开发作基础。其中包含例如:网络,位置等服务。
Media层提供了图形、音频和视频的处理的基础。图形方面包含Core Animation、OpenGL等,音频方面包含AV Foundation、OpenAL等,视频方面包含AV Foundation、AVKit、UIImagePickerController等。
Cocoa Touch层包含构建iOS应用的主要框架。这些框架定义了你的应用程序的表现层。他们还提供了应用程序的基础设施和关键的技术机制,如多任务处理机制,触摸式输入机制,推送通知机制等许多高层次的系统服务。当然,这也是作为程序猴的我们最关心的一层。主要框架包含:UIKit、MapKit、EventKit等。
Application层就不做过多的讲解了。
2. 继承层次
上面的关系图从对象的继承层面写出了UIKit的框架层次,其实这个图并不完整。因为NSObject是iOS中所有类的基类,所以单纯的从NSObject指向UIKit框架的类不太准确。就拿Foundation框架来说,它也是基于NSObject的。因此,我们把上图所幸称之为NSObject的UI系类,Foundation框架下的类则称之为NS系。
在UI系的继承层次中可以看出,UIView继承自UIResponder,这也赋予了它事件处理能力。而看到UIView的子类,包括UIWindow、UILabel、UIAlertView、UIWebView等等,终于看到了我们开发中最常用也最亲切的东西,本章的内容也到此为止。
本文大体对UIView的职能和地位做了一定的介绍,接下来的几篇关于UIView的文章将在三个职能、Cycle Memthod和Override Method几个方面进行展开。期望本文能对您有所帮助,更期望您的宝贵意见。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。