Core Animation

基本概念

Core Animation 作用在 CALayer 上,CALayer从概念上类似UIView,每一个UIView都有一个layer属性,可以通过这个layer来为更改相应view的形式,或者做动画。

我们可以将UIView看成是一种特殊的CALayer,UIView下有一个layer属性,这个layer层就是真正绘制UIView所要展示的东西的人。然而之所以要将CALayer封装成UIView则是为了给其添加事件响应。

类的架构

CAAnimation是所有动画对象的父类,实现CAMediaTiming协议,负责控制动画的时间、速度和时间曲线等,为抽象类,不能直接使用。

CAPropertyAnimation属性动画,一般不直接使用。

CATransition转场动画。

CAAnimationGroup组合动画。

CABasicAnimation基本动画。

CAKeyFrameAnimation关键帧动画。

CASpringAnimation弹簧动画,iOS9.0之后新增类,是CABasicAnimation的子类。

CAMediaTiming协议

通过CAAnimation实现的协议为CAMediaTiming。

repeatCount,动画的重复次数,可以设置为小数。设置为HUGE_VALF,表示无限重复。

repeatDuration,动画总时长,如果大于单次时长,则重复;如果小于单次时长,则截断。

duration,单次动画时长。

speed,图层或动画模型相对于父图层CALayer的时间流逝速度。

fillMode,有效期结束后,动画对象的呈现效果是冻结还是移除。

beginTime,相对于父对象的开始时间。注意,以系统的绝对时间为准。例如:

timeOffset,时间轴偏移量。将时间轴移动至偏移位置,再执行整个动画时长。假设动画时长3秒,偏移量为8,则开始位置为8 % 3 = 2,再执行3秒,即在整个时长的1/ 3处结束。

CACurrentMediaTime,返回系统当前的绝对时间(从本次开机开始),单位秒。

CAAnimation

timingFunction动画执行的快慢交替。有如下几个可选项。

kCAMediaTimingFunctionLinear//线性节奏,就是匀速

kCAMediaTimingFunctionEaseIn//淡入,缓慢加速进入,然后匀速

kCAMediaTimingFunctionEaseOut//淡出,匀速,然后缓慢减速移除

kCAMediaTimingFunctionEaseInEaseOut//淡入淡出,结合以上两者

kCAMediaTimingFunctionDefault//默认效果

delegate代理。

- (void)animationDidStart:(CAAnimation *)anim;//动画开始

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag; //动画结束。flag,动画正常播放完成返回为YES。没有播放完成或者被移除则返回NO。

removedOnCompletion

默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode。

CABasicAnimation

fromValue  开始的值

toValue    结束时的值

byValue    动画过程中的值

为了防止冲突,toValue只能设置一个。

keyPath

[CABasicAnimation animationWithKeyPath:@"transform.rotation.y"]

keypath需要填写指定的值,详情见下列表

还有如下属性(不完整)

CAKeyFrameAnimation 

关键帧动画,提供几个关键的值,中间的动画会自动生成。

values存放“关键帧”,动画会一次到达关键帧指定的值,并自动生成中间动画。

path    路径,可以设置一个CGPathRef的路径,让图层按照路径移动,因此只对anchorPosition和position起作用,当设置了path会忽略掉values中的值。

keyTimes 指定到达每个关键帧的时间,与values对应,不设置就是平分。timingFunctions  指定到达每一帧的速度,度values对应,可以不设置。

CAAnimationGrop

组合动画,存放多个layer动画。

animations数组,里面存放动画(动画可以是,基本动画、关键帧动画等其他动画)里面存放的动画可以不设置时间和重复次数,统一在CAAnimationGrop对象中设置。数组中动画的duration可以单独设置,还可以设置数组中动画的开始时间,来控制动画单个动画在组动画中的执行时间,但是时间不能超过组动画的时间,如果超过,该动画不会执行。

CATransition

转场动画,主要用于转场动画从一个场景以动画的形式过渡到另一个场景。

type 过渡动画的类型。

kCATransitionFade \\渐变

kCATransitionMoveIn \\覆盖

kCATransitionPush \\推出

kCATransitionReveal \\揭开

subtype 过渡动画的方向

kCATransitionFromRight \\从右边

kCATransitionFromLeft \\从左边

kCATransitionFromTop \\从顶部

kCATransitionFromBottom \\从底部

endProgress 定义过渡的结束点,结束点的值必须大于或者等于开始点。默认值为1.0。

startProgress 定义过度的开始点,开始点的值必须小于或者等于结束点。默认值为0.0。

这两个属性是float类型的,可以控制动画进行的过程,可以让动画停留在某个动画点上,值在0.0到1.0之间。endProgress要大于等于startProgress。比如:立方体转,可以设置endProgress= 0.5,让动画停留在整个动画的特定位置(停止在旋转一般的状态)。

CASpringAnimation

CASpringAnimation是iOS9新加入动画类型,是CABasicAnimation的子类,用于实现弹簧动画。

mass:质量(影响弹簧的惯性,质量越大,弹簧惯性越大,运动的幅度越大)

stiffness:弹性系数(弹性系数越大,弹簧的运动越快)

damping:阻尼系数(阻尼系数越大,弹簧的停止越快)

initialVelocity:初始速率(弹簧动画的初始速度大小,弹簧运动的初始方向与初始速率的正负一致,若初始速率为0,表示忽略该属性)

settlingDuration:结算时间(根据动画参数估算弹簧开始运动到停止的时间,动画设置的时间最好根据此时间来设置)

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

推荐阅读更多精彩内容