iOS界面编程之界面管理(一)

一、UIView

UIView是iPhone程序非常重要的元素。所有可视化控件都继承于UIView并展示各自独特的功能,如UILabel展示文字、UIImageView显示图片,这才形成了丰富绚丽、形形色色的程序界面。UIView主要有三方面功能:

  • 渲染区域内容与执行动画
  • 管理子视图
  • 处理触摸、手势等事件

二、iOS界面层次结构

iPhone程序以树形结构管理其上的控件,每个视图都置于其父视图上并管理着自己的子视图。


view.png

一般而言,程序界面以UIWindow为树根节点,管理所有子视图。UIWindow也是UIView的子类,但是UIWindow并不无任何可视化内容,它只负责管理其上的子视图。一般而言,每个应用程序只有一个UIWindow。事实上Android,Cocos2d-x等也是采用这样的树形管理策略。这种树形结构的优势在于渲染时通过简单的树深度优先原则即可正确渲染界面。另一方面,这样的树形结构在消息传递方面也是很便捷。例如一个触摸事件放生时,UIWindow首先接收到消息,然后将消息传递给响应的子视图,响应子视图又再传给它的子视图。通过这样的层级传递,可以效率较高地找到真正的响应对象。

三、界面更新原理

在与程序的交互中(触摸屏幕,手势操作等),界面经常需要更新。这些界面的更新过程是怎样的呢?


drawing_model.jpg

以触摸事件为例从触摸事件的发生到界面改变主要经过八个步骤:

  • 用户触摸屏幕
  • 硬件将触摸事件传递到UIKit框架
  • UIKit框架将触摸事件打包成UIEvent对象并传递给响应View
  • View接收到事件后更改视图内容
  • UIKit发起重新布局视图
  • UIKit发起重新渲染绘制视图
  • 更改的视图发送给GPU
  • GPU重新绘制视图并在屏幕中显示

推荐阅读更多精彩内容