您的位置:首页 > 移动开发 > IOS开发

IOS 应用视图交互模型分析

2012-07-29 01:14 232 查看
作者:朱克锋

邮箱:zhukefeng@iboxpay.com

转载请注明出处:http://blog.csdn.net/linux_zkf

任何时候,当用户和您的程序界面进行交互、或者您的代码以编程的方式进行某些修改时,UIKit内部都会发生一个复杂的事件序列。在事件序列的一些特定的点上,UIKit会调用您的视图类,使它们有机会代表应用程序进行事件响应。理解这些调用点是很重要的,有助于理解您的视图对象和系统在哪里进行结合。

下面的步骤说明进一步刨析,解释了序列的每个阶段都发生了什么,以及应用程序可能如何进行响应。

1. 用户触击屏幕。

2. 硬件将触击事件报告给UIKit框架。

3. UIKit框架将触击信息封装为一个UIEvent对象,并派发给恰当的视图。

4. 视图的事件处理方法可以通过下面的方式来响应事件:

▪调整视图或其子视图的属性变量(边框、边界、透明度等)。

▪将视图(或其子视图)标识为需要修改布局。

▪将视图(或其子视图)标识为布局需要重画。

▪将数据发生的变化通报给控制器。

5. 当然,上述的哪些事情需要做及调用什么方法来完成是由视图来决定的。

6. 如果视图被标识为需要重新布局,UIKit就调用视图的layoutSubviews方法。您可以在自己的定制视图中重载这个方法,以便调整子视图的尺寸和位置。举例来说,如果一个视图具有很大的滚动区域,就需要使用几个子视图来“平铺”,而不是创建一个内存很可能装不下的大视图。在这个方法的实现中,视图可以隐藏所有不需显示在屏幕上的子视图,或者在重新定位之后将它们用于显示新的内容。作为这个过程的一部分,视图也可以将用于“平铺”的子视图标识为需要重画。

7. 如果视图的任何部分被标识为需要重画,UIKit就调用该视图的drawRect:方法。UIKit只对那些需要重画的视图调用这个方法。在这个方法的实现中,所有视图都应该尽可能快地重画指定的区域,且都应该只重画自己的内容,不应该描画子视图的内容。在这个调用点上,视图不应该尝试进一步改变其属性或布局。

8. 所有更新过的视图都和其它可视内容进行合成,然后发送给图形硬件进行显示。

9. 图形硬件将渲染完成的内容转移到屏幕。

请注意:上述的更新模型主要适用于采纳内置视图和描画技术的应用程序。如果您的应用程序使用OpenGL ES来描画内容,则通常要配置一个全屏的视图,然后直接在OpenGL的图形上下文中进行描画。您的视图仍然需要处理触碰事件,但不需要对子视图进行布局或者实现drawRect:方法。

基于上述的步骤说明可以看出,UIKit为您自己定制的视图提供如下主要的结合点:

1. 下面这些事件处理方法:

▪f2 touchesBegan:withEvent:

▪f2 touchesMoved:withEvent:

▪f2 touchesEnded:withEvent:

▪f2 touchesCancelled:withEvent:

2. layoutSubviews方法

3. drawRect:方法

大多数定制视图通过实现这些方法来得到自己期望的行为。您可能不需要重载所有方法,举例来说,如果您实现的视图是固定尺寸的,则可能不需要重载layoutSubviews方法。类似地,如果您实现的视图只是显示简单的内容,比如文本或图像,则通常可以通过简单地嵌入UIImageView和UILabel对象作为子视图来避免描画。

重要的是要记住,这些是主要的结合点,但不是全部。UIView类中有几个方法的设计目的就是让子类重载的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: