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

[IOS]CoreAnimation基础[翻译1部分]

2015-08-19 21:05 381 查看
翻译自Core Animation 第一章

CoreAnimation为你的app提供了通用目的的的动画效果和和其他视觉元素。CoreAnimation并不能意味着作为你app的视觉效果的一种替换,而是一种能为你app的视觉效果提供更好的性能以及动画支持。CoreAnimation通过缓存视图内容成位图,通过图像硬件直接操纵视图内容。某种情况下,这种缓存机制需要你重新去思考如何呈现和管理app的内容,但是大多数情况下,你完全不用担心这一点。除了缓存视图内容,CoreAnimation也允许你定制视觉效果,并将该效果集成进你的视图,生成动画等。

你可以使用CoreAnimation(以下都以CA简称)来改变你app的视图和视觉元素。比如,可以使用CA动画的改变视图中的位置,尺寸,透明度。当你对某个属性做了改变,CA就会在当前属性状态向新值改变的时候产生动画。并不支持你1s60次的改变视图内容来产生动画效果,而是应该在你视图内容在屏幕内变换移动的,滑进或者画出的时候使用时图像转换来产生动画来达到增强视觉效果。

图层为画图和动画提供了基础支持

图层(Layer)对象是3D空间内被组织起来的3D平面,同时也是CA的核心。和View一样,图层同样管理者几何,视觉属性。不同于View的地方,图层并不能定义自己的样子。图层只管理一个位图的状态信息。位图可以是视图的结果也可以是你所制定的某张图片。正是因为如此,在app中使用图层主要是作为模型对象,因为图层主要就是用来管理数据的。这一观念至关重要,因为它会影响到动画的行为效果。

基于图层的绘制模型
实际上,你app中的大多数图层并没有绘制什么。而是捕获你应用所提供的视图内容,并将其缓存进位图,所以位图有时也被称为后备存储。当随后更改图层中的属性的时候,你所做就是更改与图层对象所关联的状态信息。当一次改变触发动画,CA将传递图层的位图以及状态信息给图像硬件,它不不是创建处心的位图,而是在原有位图赏修改。如图1-1所示,通过操纵位图所进行的修改比软件自身的动画快的多。



因为CA操纵的是一个静态的位图,所以基于层的绘制机制将于传统的基于视图有所差异。在基于视图的绘制中,视图的改变会调用视图的drawRect方法来重新绘制内容。但是这种绘制机制是十分的昂贵,因为他使用了主线程(main thread)的CPU资源。而使用CA避免产生昂贵的额外开销,通过操纵缓存下来的硬件中的位图可以达到同样的效果。

尽管要尽可能的的使用CA来缓存内容,但是提供给视图必要的初始内容并且时时更新也是很重要的。这将在Providing
a Layer’s Contents
中详细述。

基于图层的动画
图层上的数据和状态信息被从图层内容的视觉元素上解耦。这种解耦使得CA能够让图层中元素能够从旧的状态变更到新的状态。比如,改变图层的位置属性,将会使得CA将图层从现在的位置移动到新的指定位置。相似的属性改变也能够产生合适的动画效果。图1-2说明了一些你在图层中所能进行的动画。想要了解更多的触发动画效果,见Animatable
Properties.



在动画过程中,CA会在硬件中一帧一帧的绘制。你所需要做的就是指定动画起始位置和结束位置。你也可以指定定时信息和动画所需的参数,如果你不提供这些信息,CA将提供合适的默认值。更多动画配置参数见Animating
Layer Content.

图层对象定义自己的几何属性

图层的职责之一就是管理其中内容的视觉几何属性。视觉几何效果包含了边界bounds,位置postion信息,以及各种变换方式信息。像View一样,图层也有bouds 和frame 属性 让你来调整图层和其内容的位置。图层也有view所不具有的属性,比如定位点(限定围绕该点所可以做的操作)。同时你在view上所能操纵的一些属性和在图层上也有所不同。

图层使用两种坐标系

图层同时使用基于点坐标的的坐标系和基于单元的坐标系来达到指定内容。哪种坐标系被采用决定于信息传输的类型。当直接指定屏幕上的坐标的时候或者制定与其他图层的相对位置的时候使用点基于的坐标系,比如当指定图层的位置信息的时候。当要指定适合否紧贴屏幕坐标系,使用单元坐标系。比如图层的定位点属性制定了一个点相对于图层自身边界位置的时候。

使用点基于的坐标系做常见的是制定图层的边界和位置信息。尽管图层有一个frame属性,但是该属性使用的时候确实比较少。

部分略过OS X的CA内容。主要讲的是OS X 上的坐标系 和
IOS上的坐标系 是有所不同的 。

定位点(Anchor Point)影响几何操作

图层的几何相关的操作发生在该层的定位点,可以直接访问图层的定位点属性来访问。当操纵图层的位置和变换属性的时候,受定位点的影响尤其大。因为位置变换都是依据于定位点来说的。

图1-5说明了改变定位点的默认属性昌盛何种对图层的影响。即使没有改变图层在其父视图中的位置,改变定位点也改变了位置属性。



值得注意的一点是图层也可以在3D坐标中进行转换 以下部分并未完全翻译 不过大概意思是

3D坐标系中的图形 也是可以进行3D转换的 通过3D转换矩阵

图层树是如何影响动画的?

app的CA总共有三层图层对象。每一层一的图层对象都有不同的用处。

1.图层树(layer tree)中的对象是你的app进行交互最多的。图层树中的对象储存着任何动画的属性。无论何时你改变图层的属性,你都是在使用这些对象。

2.展示树(presentation tree)中的对象包含了所有正在执行的动画效果。任意一个图层树中的对象都包含了当前动画的某些属性,并且这些属性都反映了这些对象该如何在屏幕上呈现。所以并不应该改变图层树中的这些的对象,而是使用这些对象来读取当前动画值,也可以从这些值中创建出新的动画。

3.渲染树(render tree)中的对象来管理这些动画,并且这些对象都是CA的私有属性。

图层中的对象也是像app中的view那样的组织层次。实际上,对于任何一个app初始的图层层次结构就和View中的层次结构差不多。但是,app可以在你需要的时候添加其他的图层(这些图层并不属于某一个view)。图1-9展示一个简单的app的简单层次结构。window包含了内容视图,该内容视图包含了一个按钮视图和两个单独的图层队形。每一个视图都有一个对应的图层对象。



图层树中的每一个对象,都对应一个展示层树和渲染层树的对象,如同图1-10。就像之前所提到的那样,app主要和图层树中的对象交互,并且多次的访问展示层树的对象。特别的,当访问一个图层树中的对象的presentationLayer属性返回一个展示树中的相应对象。你可能需要在动画的过程中访问这些属性。



图层和视图的关系
图层并不是你app中对view的替代物,你并不能创建一个视图界面仅仅依靠图层。图层可以理解为为图层提供基本的下层建筑。图层可以更有效的绘图何产生动画效果,并保持较高的帧数。然而也有很多图层并不能做到的事。图层并不能处理事件响应,特别是出于响应链中。因为该原因所以app还是应该有视图层来处理交互。
在IOS中,每一个视图都有一个所对应的图层。以下是关于OS X中的图层部分。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: