CoreAnimation 理解

隐式动画的理解:

1,layer层的动画都伴随着一个隐式动画(默认0.25秒的动画,例子:通过layer 层更改一个layer的背景色,可以发现不是立即变化的。)通过CATransaciton(事务)处理隐式动画的执行(+setDisableActions:)。

2,UIView 层改变背景色并不会有这样的隐式动画,而是立即去改变的。我们知道了隐式动画的实现原理,而且每个UIView对它的关联图层而言相当于一个委托,并且实现了-actionForLayer:forKey方法。在动滑block的范围内,-actionForLayer:forKey返回非空值,不在动画块的实现中,UIView对所有的图层行为返回nil。

3,呈现与模型

改变CALayer的属性并没有立刻生效,而是通过一段时间渐变更新。下面我们讲探讨这是怎么做到的?

当我们改变CALayer的一个属性时,CALayer的属性值是立马改变的,只是我们改变的属性没有直接调整图层的外观,它只是定义了图层动画结束之后图层如何显示的模型。其实这里涉及到一个微型的MVC模式。 

——Core Animation类似控制器,负责根据图层行为和事务的设置去不断的更新屏幕上这些属性的状态 

——CALayer类似模型,它是连接用户界面的虚构的类,存储了视图如何显示和动画的数据模型。apple文档中写有”图层树通常都是值的图层树模型” 

——呈现图层,是模型图层的复制,呈现图层上的属性值代表了当前屏幕显示的外观效果的属性的值,可以使用-presentationLayer方法来获取当前屏幕上属性的真正显示的值

呈现图层是由呈现树中的所有图层的的呈现图层所形成。呈现图层是在图层首次在屏幕上显示的时候创建的。如果在创建之前调用图层的-presentationLayer将会返回nil。在呈现图层上调用-modelLayer方法会返回它所呈现的图层的依赖图层(这就可以说明我们创建的原始图层是一种数据模型)

由MVC模式,我们可以了解,大多数情况下。我们不需要直接访问呈现图层,我们可以通过和模型图层(也就是我们创建的图层)交互,让Core Animation来更新显示呈现图层。下面两种情况利用呈现图层更方便 

(1)同步动画:实现基于定时器的动画时(不是基于事务的动画),使用呈现图层可以准确的知道某一时刻图层的显示位置,有利于正确的摆放图层 

(2)处理用户交互:想让做动画的图层响应用户的输入时,在呈现图层上使用-hitTest:方法来判断指定图层是否被触摸。因为呈现图层代表了用户当前看到的图层位置,而不是当前动画结束之后的位置。

 动画属性


opacity 透明度

backgroundColor 背景颜色

cornerRadius 圆角

borderWidth 边框宽度

contents 内容

shadowColor 阴影颜色

shadowOffset 阴影偏移量

shadowOpacity 阴影透明度

shadowRadius 阴影圆角

...

rotation 旋转

transform.rotation.x

transform.rotation.y

transform.rotation.z

...

scale 缩放

transform.scale.x

transform.scale.y

transform.scale.z

...

translation 平移

transform.translation.x

transform.translation.y

transform.translation.z

...

position 位置

position.x

position.y

...

bounds 

bounds.size

bounds.size.width

bounds.size.height

bounds.origin

bounds.origin.x

bounds.origin.y


关键帧动画的计算模式calculationMode:


CA_EXTERN NSString * const kCAAnimationLinear  默认值,关键帧之间直接直线相连进行插值计算

CA_EXTERN NSString * const kCAAnimationDiscrete 离散的,就是不进行插值计算,所有关键帧直接逐个进行显示

CA_EXTERN NSString * const kCAAnimationPaced  动画均匀进行,此时keyTimes和timingFunctions的设置失效

CA_EXTERN NSString * const kCAAnimationCubic  关键帧进行圆滑曲线相连后插值计算,对于曲线的形状还可以通过tensionValues,continuityValues,biasValues来进行调整自定义(http://en.wikipedia.org/wiki/Kochanek-Bartels_spline),这里的主要目的是使得运行的轨迹变得圆滑

CA_EXTERN NSString * const kCAAnimationCubicPaced  在kCAAnimationCubic的基础上使得动画运行变得均匀,就是系统时间内运动的距离相同,此时keyTimes以及timingFunctions也是无效的


动画沿路径旋转方式rotationMode,默认为nil,系统提供了两种方式:


CA_EXTERN NSString * const kCAAnimationRotateAuto  沿路径旋转

CA_EXTERN NSString * const kCAAnimationRotateAutoReverse 沿路径反向颠倒旋转


常用的转场动画类型:


方向子类型包括:


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

推荐阅读更多精彩内容