经过质量修立异行动画参数控制,一.动画的根底分类

属性动画的基类(通过属性进行动画设置,一.动画的基础分类

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 = CACurrentMediaTime()+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
在动画开端前,你若是将动画参加了1个layer,layer便马上进入动画的上马状态并等候动画开头.
你可以这么设定测试代码,将二个动画加入二个layer的时候延迟5秒执行.然后就会发觉在动画没有起来的时候,只要动画被投入了layer,layer便处于动画开始状态
( 这里代表不是很通晓)

kCAFillModeBoth
那一个实际就是上边多个的合成.动画参加后开头此前,layer便处在动画起首状态,动画甘休后layer保持动画最终的状

*/

“animationWithKey帕特h:”  传的参数无法错,比如上边的例子是缩放,就要写 
transform.scale“,假若想要设置水平依然前后运动就需求”transform.translation.x“或者 “transform.translation.y

  • 秒数」的形式。

现实参照下图:

timingFunction
设定动画的速度变化

可设置的性质-1

autoreverses
卡通甘休时是或不是履行逆动画

2.CAAimationGroup –  动画组成

removedOnCompletion
暗许为YES,代表动画执行完成后就从图层上移除,图形会过来到动画执行前的情状。倘若想让图层保持突显动画执行后的情事,那就设置为NO,可是还要设置fillMode为kCAFillModeForwards

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

fillMode
支配当前目的在非active时间段的表现。比如动画片开始以前依然动画片甘休之

 上边是3个缩放平移绕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会平素保持着卡通最终的状态

下边是3个接纳  CAKeyframeAnimation 改变View 背景观的 小例子:

kCAFillModeBackwards
以此和kCAFillModeForwards是相持的,就是在动画开头前,你即便将动画片加入了一个layer,layer便立马进入动画的初叶状态并等候动画起头.你可以这么设定测试代码,将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(线性)
匀速,给你多少个争辩静态的感觉

keyTimes:各样关键帧的小时控制。

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

path:可以设置3个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=CACurrentMedia提姆e();//设置延迟2秒执行

keyframeAnimation.removedOnCompletion = NO;

keyframeAnimation.fillMode = kCAFillModeForwards;

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

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

fromValue
开始值

4. CATransition – 转场动画

toValue
终了值(絶対値)

大约的事例:

byValue
keyPath属性的变化值(使用较少)

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的持续时间内,keyPath相应属性的值从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
三个数组,提供了一组关键帧的值, 当使用path的 时候
values的值自动被忽视。

calculationMode计算方式:
其利害攸关针对的是每一帧的内容为多少个座标点的情况,相当于对anchorPoint 和
position
举行的动画.当在平面座标系中有三个离散的点的时候,可以是离散的,也得以直线相连后展开插值总括,也足以拔取圆滑的曲线将他们不断后开展插值总括.
calculationMode方今提供如下二种形式
关键字
属性

kCAAnimationLinear
calculationMode的私自认同值,表示当关键帧为座标点的时候,关键帧之间一贯直线相连举办插值总计

kCAAnimationDiscrete
离散的,就是不开展插值总括,全部关键帧直接各个进行浮现;

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

kCAAnimationCubic
对关键帧为座标点的关键帧进行圆滑曲线相连后插值统计,对于曲线的形态还足以经过tensionValues,continuityValues,biasValues来开展调整自定义,那里的数学原理是Kochanek–Bartels
spline,那里的关键目的是驱动运营的轨道变得圆滑;

kCAAnimationCubicPaced
看那么些名字就了解和kCAAnimationCubic有自然关系,其实就是在kCAAnimationCubic的底蕴上使得动画运营变得均匀,就是系统时间内运动的离开相同,此时keyTimes以及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中安装的性情优先级高于内部每三个卡通的属性,比如其中posAnim.removedOnCompletion
= YES;
,然而在group中安装了animGroup.removedOnCompletion =
NO;animGroup.fillMode = kCAFillModeForwards;
其间属性即为无效
5.1 UIBezier帕特h、缩放、透明合并起来的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.begin提姆e = 0.0; // 4.
测算暂停的光阴(那里也足以用CACurrentMediaTime()-pausedTime)
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime()
fromLayer:nil] – paused提姆e; // 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-向晨宇撰写