IOS-Uikit框架介绍

•UIKit可识别三种类型的输入事件:
–触摸事件
–运动(加速计)事件
–远程控制事件

IKit框架将触击信息封装为一个UIEvent对象,并派发给恰当的视图(有关UIKit如何将事件递送给您的视图的详细解释,请参见“事件的传递”部分)。

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

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

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

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

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

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

    如果视图被标识为需要重新布局,UIKit就调用视图的layoutSubviews方法。

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

    如果视图的任何部分被标识为需要重画,UIKit就调用该视图的drawRect:方法。

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

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

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

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

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

    下面这些事件处理方法:

        touchesBegan:withEvent:

        touchesMoved:withEvent:

        touchesEnded:withEvent:

        touchesCancelled:withEvent:

    layoutSubviews方法

    drawRect:方法

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

重要的是要记住,这些是主要的结合点,但不是全部。UIView类中有几个方法的设计目的就是让子类重载的。您可以通过查阅UIView类参考中的描述来了解哪些方法可以被重载。
视图渲染架构

虽 然您通过视图来表示屏幕上的内容,但是UIView类自身的很多基础行为却严重依赖于另一个对象。UIKit中每个视图对象的背后都有一个Core Animation层对象,它是一个CALayer类的实例,该类为视图内容的布局和渲染、以及合成和动画提供基础性的支持。

和Mac OS X(在这个平台上Core Animation支持是可选的)不同的是,iPhone OS将Core Animation集成到视图渲染实现的核心。虽然Core Animation发挥核心作用,但是UIKit在Core Animation上面提供一个透明的接口层,使编程体验更为流畅。这个透明的接口使开发者在大多数情况下不必直接访问Core Animation的层,而是通过UIView的方法和属性声明取得类似的行为。然而,当UIView类没有提供您需要的接口时,Core Animation就变得重要了,在那种情况下,您可以深入到Core Animation层,在应用程序中实现一些复杂的渲染。

posted @ 2014-02-19 23:35  吃肉的核桃  阅读(519)  评论(0编辑  收藏  举报