iOS开发--Core Animation(核心动画)(一)

Core Animation is a graphics rendering and animation infrastructure available on both iOS and OS X that you use to animate the views and other visual elements of your app.(苹果官方文档.见参考链接)

从上面官方文档中我们可以知道,Core Animation一个图像渲染和动画的底层架构。我们主要是用它是我们app中的视图或者其他可见部分动起来。

今天狠下心,花了一天的时间好好拜读了一下苹果的核心动画说明文档,虽然英文读的我很痛苦,但是还是收获颇多。首先跟大家说一些理论性的东西,毕竟实现那一套东西已经被写烂了,实在写不出什么东西了。

* 1 Core Animation本身不是一套绘画系统

也就是它本身不能进行视图内容的绘画。但是它可以基于硬件对你视图的内容进行合成和操作。重要的事情着重说:

框架的核心是层对象(CALyer Objects)

说完上面的东西大家心里应该大致记住两件事,1.Core Animation本身不能进行绘画,至于他怎么实现动画,一会儿我会揭晓。2.Core Animation的核心是层对象。

* 2 CALyer的两套坐标系

首先声明一点,CALyer的在屏幕上显示的位置是这个两者相互重要的结果。

第一种坐标系 point-based coordinate systems ,这种坐标是我相信大家都非常熟悉,我们平常对于视图的定位都是用的它。

点坐标系.png

第二种坐标系unit coordinate systems单元坐标系,这个是我今天想要跟大家介绍的。苹果公司对于引入他的解释说的非常魔性,

Unit coordinates are used when the value should not be tied to screen coordinates because it is relative to some other value. For example, the layer’s anchorPoint property specifies a point relative to the bounds of the layer itself, which can change.

单位坐标地.png

大家如果实在不懂,可以使用翻译工具翻译一下看看。大意就是当这个值不和屏幕坐标绑定在一起,而是和其他的值有关,这个时候我们要用到单元坐标系。比如说层的锚点就是和层本身的界限有关,并且它是可改变的。OK,通过这句话我们要明白一点,也是大家经常犯迷糊的一点。重点我强调说:

修改单元坐标系的内容将会对点坐标系的设置产生影响。

怎么理解上面这句话那。举个例子,我们见一个起始点为(50, 50),大小为(100,100)的CALyer添加到视图的子层上,这个时候我们修改锚点为(0,0)(锚点默认(0.5, 0.5)),并且在此之后我们打印这个层的起始点,发现此时起始点的坐标会变成(100, 100)。

最后在强调一下

CALyer显示的位置点坐标系和单元坐标系两者设置共同的作用的结果。变化范围x,y方向上都是0~1。

强势插入一波 position和 anchorPoint

position默认是CALyer的中心点坐标,注意,并不是说position就是CALyer的中心点。当我创建CALyer时,他的值就确定了,当然我们也可以修改的他的值,用法类似于view的center。而锚点的使用来确定当前position在CALyer的位置。

锚点修改的之后position在当前CALyer的位置,即单元坐标系中的位置,对于他在坐标系的位置无关。

强势分析一波。再用上面的那个例子,当前层的中心点坐标为(100, 100), position的坐标也为(100, 100), 锚点为(0.5, 0.5)。然后我们修改锚点的为(0.0),也就是说我们将position放到CALyer的起始点位置。由上面的说明我们知道,此时position的点坐标位置不变还是为(100, 100),那么此时层的中心点坐标就成了(150, 150)。现在大家明白为什么修改锚点会改变CALyer的位置了吧。

* 3 CALyer与View的关系

CALyer View
能否创建可见图像 不能,必须依赖视图 能够直接创建
能否响应事件 不能
能否进行绘画 不能
除了展示图像的其他功能 很少 很多

通上表大家可以知道CALyer的局限性很大,为什么还需要他那?主要是因为他能是图像绘画和运动变得更加简单,方便和高效。当然,这个CALyer的底层实现是密不可分的。CALyer的实现比不是调用底层硬件对图像就行重绘,而是通过对图像对象对应的数字位图(一种图片格式)进行操作,在深入的作者我就不懂了。

* 4 动画的两种方式

设置动画主要分为两种,属性动画和关键帧动画。
属性动画:这个很好理解,相信大部分也都曾用到过.属性动画就是通过对当前层属性的修改,从而达到图像改变或运动的目的.至于可修改的属性以及怎样修改,我稍后会更新一片实战的,到时候大家可以用心感受一下.
关键帧动画:这个对于大家可能有点陌生.实力分析一波,我们将动画分成几个关键的帧,然后让他在一定时间的运行,以这样的方式实现的动画就是关键帧动画.
除了上述的两种动画以外,苹果公司还提供了大量的自定义动画,他们都是CALyer的子类,实现了莫一种特殊的动画.有兴趣的朋友可以研究一下.

* 5 设置CALyer的内容

1.直接用图片做为内容
因为层是一个管理位图的容器,所以可以直接将一个图片对象赋值给层的contents属性.
2.调用代理方法
这种可以动态的为CALyer添加内容,代理方法有两个
如果是调用的displayLayer方法,核心动画将会根据代码创建位图赋值给layer的contents属性.
如果调用drawLayer : inContext方法.那么核心动画会创建一个绘图上下文,我们可以将代码写在其中,然后调用这个代理,将图像写入位图中,然后默认调用displayLayer方法赋值给layer的contents属性.

或许还有很多理论性的东西我没有注意到,毕竟我只拜读一边.苹果的动画做的算是相当不错.如此优秀东西的介绍岂会被我一遍全部领会,我会抽时间再去拜读,如果有新领悟,我会更新这篇博文.

About Core Animation

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,042评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,996评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,674评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,340评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,404评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,749评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,902评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,662评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,110评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,577评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,258评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,848评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,726评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,952评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,271评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,452评论 2 348

推荐阅读更多精彩内容