一.动画的基本功分类,通过质量修改举办动画参数控制

CAAnimation:宗旨动画的底子类,不可以一直动用,负责动画运行时刻、速度的控制,自身完成了CAMediaTiming协议。

CoreAnimation动画入门
NOV 1ST, 2015 6:16 PM

CAPropertyAnimation:属性动画的基类(通过质量进行动画设置,注意是可动画属性),无法一贯运用。

一.动画的功底分类

CAAnimationGroup:动画组,动画组是一种组成情势设计,可以透过动画组来展开具有动画行为的联结宰制,组中全体动画效果能够并发执行。

澳门永利备用网址 1

CATransition:转场动画,首要通过滤镜举行动画效果设置。

1.png

CABasicAnimation:基础动画,通过品质修改举行动画参数控制,唯有初步状态和终结状态。

上述大家得以看出动画大体可以分成如下几类:
属性
说明

CAKeyframeAnimation:关键帧动画,同样是透过质量举办动画参数控制,不过同基础动画分裂的是它可以有多个情形控制。

CAAnaimation
抽象类,不拥有动画效果,必须用它的子类才有动画效果

基本功动画、关键帧动画都属于属性动画,就是通过修改属性值暴发动画效果,开发人员只要求安装起始值和终结值,中间的进程动画(又叫“补间动画”)由系统自动计算发生。和根基动画区其他是根本帧动画可以安装多少个属性值,每八个属性中间的补间动画由系统自动已毕,由此从那一个角度而言基础动画又有什么不可作为是有多个关键帧的关键帧动画。

CAAnimaitionGroup
动画组,可以而且举行缩放,旋转

关系图

CAPropertyAnimation
抽象类,自身不富有动画效果,唯有子类才有

1.  CABasicAnimation – 基础动画

CABasicAnimation
主干动画,做一些概括意义

下边是个scale 缩放的例子:

CAKeyFrameAnimation
帧动画,做一些接连的流畅的卡通

 CABasicAnimation *scaleAnimation = [CABasicAnimation  

animationWithKeyPath:@”transform.scale“];

// 从1倍放大到1.5倍

scaleAnimation.fromValue = @(1.0);

scaleAnimation.toValue = @(1.5);

//scaleAnimation.beginTime = CACurrentMedia提姆e()+2;
//动画延迟执行时间

scaleAnimation.autoreverses = YES;
//设置那天特性表示落成动画后会回到执行动画以前的情形

//那八特性子要共同设置,表示保持执行动画后的样子不变(要想fillMode有效,最好设置removedOnCompletion=NO)

//scaleAnimation.removedOnCompletion = NO;

//scaleAnimation.fillMode = kCAFillModeForwards;

//重复次数

//scaleAnimation.repeatCount = 1;

//动画时间

scaleAnimation.duration = 0.8;

scaleAnimation.delegate = self; //代理(CAAnimationDelegate)

[self.customView.layer addAnimation:scaleAnimation
forKey:@”scaleAnimation”]; 

CATrasition
转场动画

暂停/开始 动画:

基本动画中负有类都坚守CAMediaTiming协议。
二.CAAnimation——简介
2.1 基本属性表明:
属性
说明

-(void)animationPause{

//取得内定图层动画的媒体时刻,后边参数用于钦定子图层,那里不须要

CFTimeInterval interval=[self.customView.layer
convertTime:CACurrentMediaTime() fromLayer:nil];

//设置时间偏移量,有限支撑暂停时滞留在打转的地方

self.customView.layer.timeOffset = interval;

//速度设置为0,暂停动画

self.customView.layer.speed=0;

}

-(void)animationResume{

//得到暂停的小时

CFTimeInterval beginTime= CACurrentMediaTime()-
self.customView.layer.timeOffset;

//设置偏移量

self.customView.layer.timeOffset=0;

//设置开头时间

self.customView.layer.beginTime=beginTime;

//设置动画速度,初叶运动

self.customView.layer.speed=1.0;

}

duration
卡通时长(秒为单位)(注:此处与原文有出入)

代理就三个回调:

repeatCount
再度次数。永久重复的话设置为HUGE_VALF。

– (void)animationDidStart:(CAAnimation *)anim;

– (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;

repeatDuration
再也时间

分解下 fillMode 属性以及 “animationWithKeyPath:” 那些字符串参数:

beginTime
点名动画开头时间。从开端内定延迟几秒执行的话,请设置为「CACurrentMediaTime()

fillMode 有那七个项目:

/**

kCAFillModeRemoved
那么些是暗中同意值,也等于说当动画肇始前和卡通甘休后,动画对layer都并未影响,动画停止后,layer会复苏到后面的景观?.

kCAFillModeForwards 当动画停止后,layer会一向保持着卡通最终的状态.

kCAFillModeBackwards
在动画早先前,你一旦将动画片参预了五个layer,layer便立马进入动画的启幕状态并伺机动画先导.
你可以这么设定测试代码,将1个卡通插手一个layer的时候延迟5秒执行.然后就会意识在动画没有初步的时候,只要动画被参预了layer,layer便处于动画初始状态
( 那里代表不是很了然)

kCAFillModeBoth
这么些实际上就是地点八个的合成.动画参与后开头之前,layer便处于动画初叶状态,动画截止后layer保持动画最后的状

*/

“animationWithKeyPath:”  传的参数无法错,比如下面的事例是缩放,就要写 
transform.scale“,即便想要设置水平照旧前后移动就需求”transform.translation.x“或者 “transform.translation.y

  • 秒数」的形式。

切实参照下图:

timingFunction
设定动画的进度变化

可安装的习性-1

autoreverses
动画截止时是否执行逆动画

2.CAAimationGroup –  动画组成

removedOnCompletion
专擅认同为YES,代表动画执行完成后就从图层上移除,图形会死灰复燃到动画执行前的状态。如若想让图层保持突显动画执行后的情形,那就安装为NO,然而还要设置fillMode为kCAFillModeForwards

对照于CABasicAnimation 就多了二个 用来存放动画对象的 animations
 数组属性。

fillMode
支配当前目的在非active时间段的作为。比如动画片起初以前依旧动画片截止之

 下边是一个缩放平移绕y轴转动的咬合卡通:

2.2 fillMode表明表明:
属性
说明

CABasicAnimation *scaleAnimation = [CABasicAnimation
animationWithKeyPath:@”transform.scale”];

scaleAnimation.fromValue = @(1);

scaleAnimation.toValue = @(0.5);

scaleAnimation.autoreverses = YES;

CABasicAnimation *moveAnimation = [CABasicAnimation
animationWithKeyPath:@”transform.translation.x”];

moveAnimation.fromValue = @(0);

moveAnimation.toValue = @(100);

moveAnimation.autoreverses = YES;

CABasicAnimation *rotateAnimation = [CABasicAnimation
animationWithKeyPath:@”transform.rotation.y”];

rotateAnimation.fromValue = @(0);

rotateAnimation.toValue = @(2*M_PI);

rotateAnimation.autoreverses = YES;

CAAnimationGroup *groupAnnimation = [CAAnimationGroup
animation];

groupAnnimation.duration = 2;

groupAnnimation.autoreverses = YES;

groupAnnimation.animations = @[moveAnimation, scaleAnimation,
rotateAnimation];

groupAnnimation.repeatCount = MAXFLOAT;

[self.customView.layer addAnimation:groupAnnimation
forKey:@”groupAnnimation”];

kCAFillModeRemoved
那个是默许值,约等于说当动画起来前和卡通为止后,动画对layer都没有影响,动画为止后,layer会苏醒到前边的事态

3.CAKeyframeAnimation - 重点帧动画 

kCAFillModeForwards
当动画截至后,layer会一向保持着卡通最终的场合

上面是2个接纳  CAKeyframeAnimation 改变View 背景象的 小例子:

kCAFillModeBackwards
以此和kCAFillModeForwards是相对的,就是在动画开端前,你假若将动画片插足了八个layer,layer便随即进入动画的始发状态并等候动画起初.你可以如此设定测试代码,将2个动画加入2个layer的时候延迟5秒执行.然后就会发将来动画没有从头的时候,只要动画被投入了layer,layer便处在动画开头状态

CAKeyframeAnimation *color = [CAKeyframeAnimation
animationWithKeyPath:@”backgroundColor”];

color.values = @[(id)[UIColor redColor].CGColor,(id)[UIColor
yellowColor].CGColor,(id)[UIColor blueColor].CGColor];

color.keyTimes = @[@0, @0.4,@0.6, @0.8,@1.1];

color.repeatCount = 1;

color.autoreverses = YES;

color.duration = 3;

[self.customView.layer addAnimation:color forKey:@”color”];

kCAFillModeBoth
知晓了上边多少个,这些就很好领悟了,那一个其实就是下边多个的合成.动画参预后初阶从前,layer便处于动画起初状态,动画甘休后layer保持动画最终的状态.

不难的介绍下常用的习性:

2.3 CAMediaTimingFunction速度决定方式:
属性
说明

values:就是上述的NSArray对象。里面的因素称为”关键帧”(keyframe)。动画对象会在内定的岁月(duration)内,依次展现values数组中的每贰个非同儿戏帧
.

kCAMediaTimingFunctionLinear(线性)
匀速,给您2个冲突静态的痛感

keyTimes:各种关键帧的时光决定。

kCAMediaTimingFunctionEaseIn(渐进)
动画缓慢进入,然后加速距离

path:可以安装贰个CGPathRef\CGMutablePathRef,让层跟着路径移动。path只对CALayer的anchorPoint和position起效果。假设您设置了path,那么values将被忽视

kCAMediaTimingFunctionEaseOut(渐出)
动画全速进入,然后减速的到达目标地

timingFunctions: 那么些本性用以钦赐时间函数,类似于运动的加快度。

kCAMediaTimingFunctionEaseInEaseOut(渐进渐出)
动画片缓慢的进去,中间加快,然后减速的到达目的地。这么些是私自认同的卡通片行为。

(1) kCAMediaTimingFunctionLinear//线性

(2) kCAMediaTimingFunctionEaseIn//淡入

(3) kCAMediaTimingFunctionEaseOut//淡出

(4) kCAMediaTimingFunctionEaseInEaseOut//淡入淡出

(5) kCAMediaTimingFunctionDefault//默认

澳门永利备用网址 2

calculationMode:
该属性决定了实体在各个子路径下是跳着走如故匀速走。

3.png

(1) const kCAAnimationLinear//线性,默认

(2) const
kCAAnimationDiscrete//离散,无中间进程,但keyTimes设置的岁月照旧生效,物体跳跃地面世在各种关键帧上

(3) const kCAAnimationPaced//平均,keyTimes跟timeFunctions失效

(4) const kCAAnimationCubic//平均,同上

(5) const kCAAnimationCubicPaced//平均,同上

2.4 代理方法:
// 动画肇始时调用- (void)animationDidStart:(CAAnimation *)anim;//
动画为止后调用- (void)animationDidStop:(CAAnimation *)anim
finished:(BOOL)flag;

上面那一个是 CAKeyframeAnimation 协作贝塞尔曲线 的粗略例子: 

三.CABasicAnimation
概念:
CABasicAnimation其实能够作为一种尤其的紧要帧动画,只有头尾五个关键帧
属性
说明

CAKeyframeAnimation *keyframeAnimation=[CAKeyframeAnimation
animationWithKeyPath:@”position”];

//2.安装路径

//绘制贝塞尔曲线

UIBezierPath *path = [[UIBezierPath alloc] init];

[path moveToPoint:CGPointMake(self.customView.layer.position.x,
self.customView.layer.position.y)];

[path addCurveToPoint:CGPointMake(55, 400)
controlPoint1:CGPointMake(10, 300) controlPoint2:CGPointMake(160,
280)];

keyframeAnimation.path=path.CGPath;//设置path属性

//设置任何质量

keyframeAnimation.duration=8.0;

keyframeAnimation.beginTime=CACurrentMediaTime();//设置延迟2秒执行

keyframeAnimation.removedOnCompletion = NO;

keyframeAnimation.fillMode = kCAFillModeForwards;

//3.添加动画到图层,添加动画后就会实施动画

[self.customView.layer addAnimation:keyframeAnimation
forKey:@”KCKeyframeAnimation_Position”];

fromValue
开始值

4. CATransition – 转场动画

toValue
终了值(絶対値)

归纳的事例:

byValue
key帕特h属性的变化值(使用较少)

CATransition *transition = [CATransition animation];

transition.duration = 2.0f;

transition.timingFunction = [CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionEaseIn];

transition.type = kCATransitionMoveIn;

transition.subtype = kCATransitionFromRight;

[self.customView.layer addAnimation:transition forKey:@”animation”];

卡通进度说明:
乘机动画的进展,在长短为duration的持续时间内,key帕特h相应属性的值从fromValue渐渐地改为toValue
可以变更的值:

一言以蔽之的介绍下 几本个性:

澳门永利备用网址 3

type : 有五种档次:

2.png

kCATransitionFade                  //交叉淡化过渡

kCATransitionMoveIn              //移动覆盖原图

kCATransitionPush                    //新视图将旧视图推出去

kCATransitionReveal                //尾部显出来

animationWithKeyPath的值:
transform.scale = 比例轉換transform.scale.x =
闊的比例轉換transform.scale.y = 高的百分比轉換transform.rotation.z =
平面圖的旋轉opacity =
发光度marginzPositionbackgroundColorcornerRadiusborderWidthframeboundscontentscontentsRectcornerRadiushiddenmaskmasksToBoundspositionshadowColorshadowOffsetshadowOpacityshadowRadius
3.1 移动动画
CABasicAnimation *animation = [CABasicAnimation
animationWithKeyPath:@”position”];//动画选项的设定animation.duration =
2.5; // 持续时间animation.repeatCount = 1; //
重复次数//初阶帧和终了帧的设定animation.fromValue = [NSValue
valueWithCGPoint:self.viewRect.layer.position];
// 起始帧animation.toValue = [NSValue valueWithCGPoint:CGPointMake(320,
480)]; // 终了帧animation.autoreverses = YES; // 动画截止时进行逆动画//
动画终了后不回去开头状态// animation.removedOnCompletion = NO;//
animation.fillMode = kCAFillModeForwards;//
添加动画[self.viewRect.layer addAnimation:animation
forKey:@”move-layer”];

subType: 同样二种

3.2 旋转动画

kCATransitionFromRight;

kCATransitionFromLeft(默认值)

kCATransitionFromTop;

kCATransitionFromBottom

澳门永利备用网址 4

参考链接:
http://www.cnblogs.com/wengzilin/p/4256468.html

4.png

             
http://www.bubuko.com/infodetail-1000965.html

//
对Y轴进行旋转(内定Z轴的话,就和UIView的动画片一样绕主旨旋转)CABasicAnimation
*animation = [CABasicAnimation
animationWithKeyPath:@”transform.rotation.y”];//
设定动画选项animation.duration = 2.5; // 持续时间animation.repeatCount =
1; // 重复次数// 设定旋转角度animation.fromValue = [NSNumber
numberWithFloat:0.0]; // 起初角度animation.toValue = [NSNumber
numberWithFloat:2 * M_PI/3]; // 终止角度//
动画终了后不回去开首状态animation.removedOnCompletion =
NO;animation.fillMode = kCAFillModeForwards;//
添加动画[self.viewRect.layer addAnimation:animation
forKey:@”rotate-layer”];

             
http://www.cocoachina.com/ios/20141022/10005.html

3.3 缩放动画
CABasicAnimation *animation = [CABasicAnimation
animationWithKeyPath:@”transform.scale”];//
动画选项设定animation.duration = 2.5; //
动画持续时间animation.repeatCount = 1; // 重复次数animation.autoreverses
= YES; // 动画截止时进行逆动画// 缩放倍数animation.fromValue =
[NSNumber numberWithFloat:1.0]; // 开头时的倍率animation.toValue =
[NSNumber numberWithFloat:2.0]; // 截止时的倍率//
添加动画[self.viewRect.layer addAnimation:animation forKey:NULL];

             
http://www.cnblogs.com/wengzilin/p/4250957.html

3.4 CABaseAnimation组合卡通
/* 动画1(在X轴方向移动) */CABasicAnimation animation1
=[CABasicAnimation animationWithKeyPath:@”transform.translation.x”];//
终点设定animation1.toValue = [NSNumber numberWithFloat:80];; // 終点/

动画2(绕Z轴大旨旋转) */CABasicAnimation animation2
=[CABasicAnimation animationWithKeyPath:@”transform.rotation.z”];//
设定旋转角度animation2.fromValue = [NSNumber numberWithFloat:0.0]; //
初叶时的角度animation2.toValue = [NSNumber numberWithFloat:2 \

M_PI]; // 停止时的角度/ 动画组 \/CAAnimationGroup *group =
[CAAnimationGroup animation];// 动画选项设定group.duration =
3.0;group.repeatCount = 1;group.autoreverses = YES;//
添加动画group.animations = [NSArray arrayWithObjects:animation1,
animation2, nil];[self.viewRect.layer addAnimation:group
forKey:@”move-rotate-layer”];

四.CAKeyframeAnimation
概念:
任何动画要突显出活动或许转移,至少要求七个差其他主要状态,而中级的情形的变型可以透过插值计算完成,从而形成补间动画,表示关键状态的帧叫做要紧帧.
属性
说明

path
那是两个 CGPathRef
对象,暗许是空的,当大家创造好CAKeyframeAnimation的实例的时候,可以由此制定二个谈得来定义的path来让
某八个物体依照这些路子举行动画。那几个值暗中同意是nil 当其被设定的时候 values
那特性情就被遮住。

values
2个数组,提供了一组关键帧的值, 当使用path的 时候
values的值自动被忽视。

calculationMode统计方式:
其重大针对的是每一帧的情节为一个座标点的事态,约等于对anchorPoint 和
position
举办的动画.当在平面座标系中有几个离散的点的时候,可以是离散的,也得以直线相连后展开插值计算,也足以使用圆滑的曲线将她们不停后开展插值计算.
calculationMode近年来提供如下二种方式
关键字
属性

kCAAnimationLinear
calculationMode的暗中同意值,表示当关键帧为座标点的时候,关键帧之间直接直线相连进行插值总括

kCAAnimationDiscrete
离散的,就是不开展插值计算,全部关键帧间接每个举办呈现;

kCAAnimationPaced
使得动画均匀举行,而不是按keyTimes设置的或然按关键帧平分时间,此时keyTimes和timingFunctions无效;

kCAAnimationCubic
对关键帧为座标点的关键帧进行圆滑曲线相连后插值总结,对于曲线的形态还足以因此tensionValues,continuityValues,biasValues来进展调整自定义,那里的数学原理是Kochanek–巴特els
spline,那里的第叁目的是驱动运维的轨道变得圆滑;

kCAAnimationCubicPaced
看这几个名字就知晓和kCAAnimationCubic有必然关联,其实就是在kCAAnimationCubic的基本功上使得动画运转变得均匀,就是系统时间内移动的离开相同,此时key提姆es以及timingFunctions也是于事无补的.

4.1 使用贝赛尔曲线路径的主要帧动画
UIBezierPath *path = [UIBezierPath bezierPath];[path
moveToPoint:CGPointMake(-40, 100)];[path
addLineToPoint:CGPointMake(360, 100)];[path
addLineToPoint:CGPointMake(360, 200)];[path
addLineToPoint:CGPointMake(-40, 200)];[path
addLineToPoint:CGPointMake(-40, 300)];[path
addLineToPoint:CGPointMake(360, 300)];CAKeyframeAnimation
*moveAnimation = [CAKeyframeAnimation
animationWithKeyPath:@”position”];moveAnimation.path = path.CGPath;
//是关键moveAnimation.duration = 2.0f;moveAnimation.rotationMode =
kCAAnimationDiscrete;//kCAAnimationPaced kCAAnimationCubic
:使得keytimes无效[moveAnimation setKeyTimes:[NSArray
arrayWithObjects:[NSNumber numberWithFloat:0.0],[NSNumber
numberWithFloat:0.1], [NSNumber numberWithFloat:0.50],[NSNumber
numberWithFloat:0.65], [NSNumber numberWithFloat:0.7],[NSNumber
numberWithFloat:1.0], nil]];[self.viewRect.layer
addAnimation:moveAnimation forKey:@”moveAnimation”];

4.2 使用基于缩放的主要帧动画
CAKeyframeAnimation *bounce = [CAKeyframeAnimation
animationWithKeyPath:@”transform”];///设置动画CATransform3D forward =
CATransform3DMakeScale(1.3, 1.3, 1);CATransform3D back =
CATransform3DMakeScale(0.7, 0.7, 1);CATransform3D forward2 =
CATransform3DMakeScale(1.2, 1.2, 1);CATransform3D back2 =
CATransform3DMakeScale(0.9, 0.9, 1);[bounce setValues:[NSArray
arrayWithObjects: [NSValue
valueWithCATransform3D:CATransform3DIdentity], [NSValue
valueWithCATransform3D:forward], [NSValue
valueWithCATransform3D:back], [NSValue
valueWithCATransform3D:forward2], [NSValue
valueWithCATransform3D:back2], [NSValue
valueWithCATransform3D:CATransform3DIdentity],nil]];[bounce
setDuration:1];UILabel *temp = (UILabel *) [self.view
viewWithTag:100];[temp.layer addAnimation:bounce
[forKey:NULL];[self.viewRect.layer](https://link.jianshu.com?t=forKey:NULL%5D;%5Bself.viewRect.layer)
addAnimation:bounce forKey:NULL];

4.3 使用基于路径的基本点帧动画
CGMutablePathRef path = CGPathCreateMutable();CGPathMoveToPoint(path,
NULL, 50.0, 120.0);CGPathAddCurveToPoint(path, NULL, 50.0, 275.0, 150.0,
275.0, 150.0,
120.0);CGPathAddCurveToPoint(path,NULL,150.0,275.0,250.0,275.0,250.0,120.0);CGPathAddCurveToPoint(path,NULL,250.0,275.0,350.0,275.0,350.0,120.0);CGPathAddCurveToPoint(path,NULL,350.0,275.0,450.0,275.0,450.0,120.0);CAKeyframeAnimation
*anim = [CAKeyframeAnimation animationWithKeyPath:@”position”];[anim
setPath:path];[anim setDuration:3.0];[anim
[setAutoreverses:YES];CFRelease(path);[self.viewRect.layer](https://link.jianshu.com?t=setAutoreverses:YES%5D;CFRelease(path);%5Bself.viewRect.layer)
addAnimation:anim forKey:@”path”];

4.4 使用基于地点点的主要桢动画
CAKeyframeAnimation *keyAnim = [CAKeyframeAnimation
animationWithKeyPath:@”transform”];CATransform3D rotation1 =
CATransform3DMakeRotation(30 * M_PI/180, 0, 0, -1);CATransform3D
rotation2 = CATransform3DMakeRotation(60 * M_PI/180, 0, 0,
-1);CATransform3D rotation3 = CATransform3DMakeRotation(90 * M_PI/180,
0, 0, -1);CATransform3D rotation4 = CATransform3DMakeRotation(120 *
M_PI/180, 0, 0, -1);CATransform3D rotation5 =
CATransform3DMakeRotation(150 * M_PI/180, 0, 0, -1);CATransform3D
rotation6 = CATransform3DMakeRotation(180 * M_PI/180, 0, 0,
-1);[keyAnim setValues:[NSArray arrayWithObjects: [NSValue
valueWithCATransform3D:rotation1], [NSValue
valueWithCATransform3D:rotation2], [NSValue
valueWithCATransform3D:rotation3], [NSValue
valueWithCATransform3D:rotation4], [NSValue
valueWithCATransform3D:rotation5], [NSValue
valueWithCATransform3D:rotation6], nil]];[keyAnim
setKeyTimes:[NSArray arrayWithObjects: [NSNumber
numberWithFloat:0.0], [NSNumber numberWithFloat:0.2f], [NSNumber
numberWithFloat:0.4f], [NSNumber numberWithFloat:0.6f], [NSNumber
numberWithFloat:0.8f], [NSNumber numberWithFloat:1.0f],
nil]];[keyAnim setDuration:4];[keyAnim
setFillMode:kCAFillModeForwards];[keyAnim
[setRemovedOnCompletion:NO]澳门永利备用网址,;[self.viewRect.layer](https://link.jianshu.com?t=setRemovedOnCompletion:NO%5D;%5Bself.viewRect.layer)
addAnimation:keyAnim forKey:nil];

五.CAGroupAnimation
概念:
将二种动画叠加起来同时播报,Group中设置的属性优先级高于内部每3个动画片的质量,比如其中posAnim.removedOnCompletion
= YES;
,不过在group中装置了animGroup.removedOnCompletion =
NO;animGroup.fillMode = kCAFillModeForwards;
内部属性即为无效
5.1 UIBezierPath、缩放、透明合并起来的Group动画
-(void) startAnimations{ CAAnimationGroup *group = [self
createGroupAnimation]; [self.viewRect.layer addAnimation:group
forKey:NULL];}- (CAAnimationGroup *)createGroupAnimation{
//贝塞尔曲线路径 UIBezierPath *movePath = [UIBezierPath bezierPath];
[movePath
moveToPoint:CGPointMake(10.0,
10.0)]; [movePath addQuadCurveToPoint:CGPointMake(100, 300)
controlPoint:CGPointMake(300, 100)]; //路径动画 CAKeyframeAnimation *
posAnim = [CAKeyframeAnimation animationWithKeyPath:@”position”];
posAnim.path = movePath.CGPath; posAnim.removedOnCompletion = YES;
//缩放动画 CABasicAnimation *scaleAnim = [CABasicAnimation
animationWithKeyPath:@”transform”]; scaleAnim.fromValue = [NSValue
valueWithCATransform3D:CATransform3DIdentity]; scaleAnim.toValue =
[NSValue
valueWithCATransform3D:CATransform3DMakeScale(0.1,
0.1, 1.0)]; scaleAnim.removedOnCompletion = YES; //透明动画
CABasicAnimation *opacityAnim = [CABasicAnimation
animationWithKeyPath:@”opacity”]; opacityAnim.fromValue = [NSNumber
numberWithFloat:1.0]; opacityAnim.toValue = [NSNumber
numberWithFloat:0.1]; opacityAnim.removedOnCompletion = NO; //动画组
CAAnimationGroup *animGroup = [CAAnimationGroup animation];
animGroup.animations = [NSArray arrayWithObjects:posAnim, scaleAnim,
opacityAnim, nil]; animGroup.duration = 1;
animGroup.removedOnCompletion = NO; animGroup.fillMode =
kCAFillModeForwards; return animGroup;}

六.CATransition
概念:
关键字
属性

startProgress
卡通起先(在一体化动画的百分比)

endProgress
卡通甘休(在全体动画的百分比)

重在字属性
CATransition
关键字:type
关键字
属性

kCATransitionFade
淡出

kCATransitionMoveIn
蒙面原图

kCATransitionPush
推出

kCATransitionReveal
底层显出来

subtype
关键字
属性

kCATransitionFromRight

kCATransitionFromLeft

kCATransitionFromTop

kCATransitionFromBottom

还有一种设置动画类型的办法,不用setSubtype,只用setType.[animation
setType:@“suckEffect”];那里的suckEffect就是功力名称,可以用的功力紧要有:
关键字
属性

fade
穿插淡化过渡

push
新视图把旧视图推出去

moveIn
新视图移到旧视图上边

reveal
将旧视图移开,显示上面的新视图

cube
立方体翻滚效果

oglFlip
左右左右翻转职能

suckEffect
裁减成效,如一块布被抽走

rippleEffect
水滴效果

pageCurl
开拓进取翻页效果

pageUnCurl
向下翻页效果

cameraIrisHollowOpen
照相机镜头打开效果

cameraIrisHollowClos
照相机镜头关闭效果

6.1改观导航栏文字
CATransition *animation = [CATransition animation];animation.duration
= 0.5;animation.type = kCATransitionFade;//过渡效果animation.subtype =
kCATransitionFromRight;//过渡方向animation.timingFunction =
[CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionEaseInEaseOut];//样式[self.navigationController.navigationBar.layer
addAnimation: animation forKey:
@”changeTextTransition”];self.navigationController.navigationBar.topItem.title
= @”new标题”;

6.2切换视图
CATransition * transition = [CATransition
animation];transition.duration = 1.0;//动画间隔transition.type =
kCATransitionReveal;//oglFlip
紧要类型,决定动画效果transition.startProgress =
0.0;//先导transition.endProgress = 1.0;//甘休transition.subtype =
kCATransitionFromRight;//次要项目,决定动画方向transition.timingFunction
= [CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionEaseInEaseOut];//时间函数[self.viewRect.layer
addAnimation:transition forKey:@”ToNext”];srand((unsigned)time(0));int
i = rand() % 5;self.view.backgroundColor =
_arrayColors[i];[[self.view layer] addAnimation:transition
forKey:@”animation”];

七.CALayer上动画的间歇和死灰复燃
暂停:
-(void)pauseLayer:(CALayer*)layer{ CFTimeInterval pausedTime = [layer
convertTime:CACurrentMediaTime() fromLayer:nil]; //
让CALayer的时光截至走动 layer.speed = 0.0; //
让CALayer的年华停留在pausedTime那一个时刻 layer.timeOffset = pausedTime;}

恢复
-(void)resumeLayer:(CALayer*)layer{ CFTimeInterval pausedTime =
layer.timeOffset; // 1. 让CALayer的时刻持续行动 layer.speed = 1.0; // 2.
收回上次记录的驻留时刻 layer.timeOffset = 0.0; // 3. 裁撤上次安装的光阴
layer.beginTime = 0.0; // 4.
划算暂停的时光(那里也得以用CACurrentMediaTime()-pausedTime)
CF提姆eInterval timeSincePause = [layer convertTime:CACurrentMediaTime()
fromLayer:nil] – pausedTime; // 5.
安装相对于父坐标系的初叶时间(今后退timeSincePause) layer.beginTime =
timeSincePause;}

八.UIView的属性:
8.1 属性:
关键字
属性

frame
视图框架

center
视图地点

bounds
视图⼤⼩

backgroundColor
背景颜⾊

alpha
视图折射率

transform
视图转换

8.2 UIView动画的安装
⽅法名
作⽤

+(void)setAnimationDuration:(NSTimeInterval)duration;
卡通持续时间

+(void)setAnimationDelay:(NSTimeInterval)delay;
动画片发轫前延时

+(void)setAnimationCurve:(UIViewAnimationCurve)curve;
卡通的快慢曲线

+(void)setAnimationRepeatAutoreverses:(BOOL)repeatAutoreverses;
动画片反转

+(void)setAnimationRepeatCount:(float)repeatCount;
卡通反转的次数

+(void)setAnimationDelegate:(id)delegate;
安装动画的代办

+(void)setAnimationWillStartSelector:(SEL)selector;
卡通开端的代办⽅法

+(void)setAnimationDidStopSelector:(SEL)selector;
动画片截至的代办⽅法

+(void)setAnimationBeginsFromCurrentState:(BOOL)fromCurrentState;
动画从此时此刻情景继续执⾏

九.参考文献
1.iOS基础 –
主旨动画

2.iOS官方文档guide3.iOS官方文档demo4.iOS官方搜索地址5.CABasicAnimation的基本采用办法(移动·旋转·放大·收缩)6.谈谈iOS
Animation
7.CAKeyframeAnimation
关键帧动画的用法
8.CoreAnimation
demo下载地址:
CoreAnimation德姆o-向晨宇撰写