一. CABasicAnimation
1. 使用"animationWithKeyPath:"方法进行CABasicAnimation的实例化,并指定Layer的属性作为关键路径来注册
CABasicAnimation *animation=[CABasicAnimation animationWithKeyPath:@"position"];
2. 设定动画
属性 | 说明 |
---|---|
duration | 动画时长(秒为单位) |
repeatCount | 重复次数。永久重复的话设置为HUGE_VALF。 |
beginTime | 指定动画开始时间。从开始指定延迟几秒执行的话,请设置为 「CACurrentMediaTime() + 秒数」的形式。 |
timingFunction | 设定动画的速度变化 |
autoreverses | 动画结束时是否执行逆动画 |
animation.duration=2.5;//动画持续时间
animation.repeatCount=1; // 不重复
animation.beginTime=CACurrentMediaTime()+2; // 2秒后执行
// 动画先加速后减速
animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
3.设定动画的开始帧和结束帧
设定动画开始和结束帧的状态。设定的值会变成KeyPath所指定的属性的值。
属性 | 说明 |
---|---|
fromValue | 开始值 |
toValue | 终了值(絶対値) |
byValue | 终了值(相对值) |
// 指定position属性(移动)
CABasicAnimation *animation=[CABasicAnimation animationWithKeyPath:@"position"];
...
// 设定动画起始帧和结束帧
animation.fromValue=[NSValue valueWithCGPoint:CGPointMake(0,0)]; // 起始点
animation.toValue=[NSValue valueWithCGPoint:CGPointMake(320,480)]; //终了点
5.添加动画
为Layer添加设置完成的动画,可以给Key指定任意名字。
[myView.layer addAnimation:animation forKey@"move-layer"];
6.动画结束后回到出事状态的解决方法
用CABasicAnimation执行动画,在动画结束后会回归动画开始前的状态,想要解决的话必须设置“removedOnCompletion”和“fillMode”这两个属性
// 动画终了后不返回初始状态
animation.removedOnCompletion=NO;
animation.fillMode=kCAFillModeForwards;