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;