欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CABasicAnimation绘制动画

程序员文章站 2022-03-01 15:05:02
...

CABasicAnimation类的使用方式就是基本的关键帧动画。

所谓关键帧动画,就是将Layer的属性作为KeyPath来注册,指定动画的起始帧和结束帧,然后自动计算和实现中间的过度动画的一种动画方式。

使用CABasicAnimation:

1.引用QuartzCore.framework

将“QuartzCore.framework”这个库添加到项目中。并且在需要使用CABaseAnimation类的地方import头文件。

#import <QuartzCore/QuartzCore.h>	

2.CABaseAnimation的实例化以及关键路径的注册

使用“animationWithKeyPath:”方法进行CABasicAnimation的实例化,并指定Layer的属性作为关键路径类注册。

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];

3.设定动画

属性 说明
duration 动画时长(秒为单位)(注:此处与原文有出入)
repeatCount 重复次数。永久重复的话设置为HUGE_VALF。
beginTime 指定动画开始时间。从开始指定延迟几秒执行的话,请设置为 「CACurrentMediaTime() + 秒数」的形式。
timingFunction 设定动画的速度变化
autoreverses 动画结束时是否执行逆动画
animation.duration = 2.5; //动画持续时间
animation.repeatCount = 1; //不重复
animation.beginTime = CACurrentMediaTime() + 2;  //2s后执行
animation.autoreverses = YES;  // 结束后执行逆动画

//  动画先加速后减速
animation.timingFunction = 
[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseOut];

4.设定动画开始和结束帧时的状态。设定的值会变为KeyPath所指定的属性的值。

属性 说明
fromValue 开始值
toValue 结束值(绝对值)
byValue 结束值(相对值)
animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, 0)];  //. 起始点
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(320, 480)];  //. 结束点

5.添加动画

为Layer添加设置完成的动画,可以给Key指定任意名字。

[view.layer addAnimation:animation forKey:@"hhhhhhhh"];

其他,动画结束后回到初始状态的现象的解决方法

用CABasicAnimation执行动画,在动画结束后会回归动画开始前的状态。想要解决的话,必须设置“removedOnCompletion”和“fillMode”这两个属性。

//  动画结束之后不返回初始状态
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;