为无为,事无事,味无味。大小多少,报怨以德。图难于其易,为大于其细。天下难事必作于易,天下大事必作于细。是以圣人终不为大,故能成其大。夫轻诺必寡信,多易必多难。是以圣人犹难之,故终无难矣。 ------老子《道德经·第六十三章》
以前老妈总是教育我,做事“不怕慢就怕干”、“白图省事”、“要踏实,一步一个脚印”,没想到跟《道德经》的思想颇有几分吻合😆。同时,在工作生活中也慢慢的体会到了先人思想的深邃和伟大,看来在以后老妈不在身边督促的日子里,还是要多多读书,好好修行。以后也好教育孩子,虽然现在女朋友都没得(凡事早做准备吗)。
好了,我们开始今天的动画分析吧。
四类动画
一、Core Animation简介
- Core Animation是核心动画,是一组非常强大的动画处理API,可以做出绚丽的动画效果。
- Core Animation执行动画都是在后台操作的,不会阻塞主线程。
- Core Animation直接作用于CALayer上,并不是UIView。
重点:动画的本质就是修改图层的某些属性
二、CAPropertyAnimation
CAPropertyAnimation是CAAnimation的子类,也是个抽象类,想要创建动画对象,要使用它的两个子类:CABasicAnimation&&CAKeyframeAnimation
1、CAPropertyAnimation--基本动画
- 相应的属性
fromValue:keyPath相应属性的初始值
toValue:keyPath相应属性的结束值 - 动画过程
随着动画的进行,在长度为duration的持续时间内,keyPath相 应属性的值从fromValue渐渐地变为toValue
keyPath内容是CALayer的可动画Animatable属性
如果fillMode=kCAFillModeForwards同时removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。
2、CAKeyframeAnimation——关键帧动画
关键帧动画,也是CAPropertyAnimation的子类,与CABasicAnimation的区别是:
2.1、CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值。
2.2、CABasicAnimation可看做是只有2个关键帧的CAKeyframeAnimation
- 属性说明:
values:上述的NSArray对象。里面的元素称为“关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧
path:可以设置一个CGPathRef、CGMutablePathRef,让图层按照路径轨迹移动。path只对CALayer的anchorPoint和position起作用。如果设置了path,那么values将被忽略
keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧。如果没有设置keyTimes,各个关键帧的时间是平分的
三、转场动画——CATransition
CATransition是CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。iOS比Mac OS X的转场动画效果少一点
- UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果
-
动画属性:
type:动画过渡类型
subtype:动画过渡方向
startProgress:动画起点(在整体动画的百分比)
endProgress:动画终点(在整体动画的百分比)
转场动画
四、CAAnimationGroup——动画组
CAAnimationGroup是CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行
- 属性说明:
animations:用来保存一组动画对象的NSArray。
默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间。








网友评论