iOS动画开发-核心动画编程[CoreAnimation]
使用步骤
1. CABaseAnimation的实例化以及关键路径的注册
使用"animationWithKeyPath:"方法进行CABasicAnimation的实例化,并指定Layer的属性作为关键路径来注册。
这里的keypath的值使用的是Layer的属性,比如opacity,position,transform等,当然你也可以使用Layer属性的属性赋值,比如transform.rotation.z,transform.scale.x,position.x等
// 指定position属性
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
2. 设定动画的属性
属性 | 说明 |
---|---|
duration | 动画时长(单位为秒) |
repeatCount | 重复次数。永久重复的话设置为HUGE_VALF |
beginTime | 指定动画开始时间,CACurrentMediaTime() + 秒数,延迟操作 |
timingFunction | 设定动画的速度变化 |
autoreverses | 动画结束时是否执行逆动画 |
removedOnCompletion | 动画终了返回初始状态 |
animation.duration = 2.5; // 动画持续时间
animation.repeatCount = 1; // 不重复
// 2秒后执行
animation.beginTime = CACurrentMediaTime() + 2;
animation.autoreverses = YES; // 结束后执行逆动画
// 动画先加速后减速
animation.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut];
3. 设定动画的开始值和结束值
属性 | 说明 |
---|---|
fromValue | 开始值 |
toValue | 终了值(绝对值) |
byValue | 终了值(相对值) |
// 设定动画起始帧和结束帧
// 起始点
animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, 0)];
// 终了点
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(320, 480)];
4. 添加动画
为Layer添加设置完成的动画,可以给Key指定任意名字
[myView.layer addAnimation:animation forKey:@"move-layer"];
组合动画
使用CAAnimationGroup类进行复数动画的组合
/* 动画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:4 * M_PI]; // 结束时的角度
/* 动画组 */
CAAnimationGroup *group = [CAAnimationGroup animation];
// 动画选项设定
group.duration = 3.0;
group.repeatCount = 1;
// 添加动画
group.animations = @[animation1, animation2];
动画开始和结束事件
/* 移动 */
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"];
animation.delegate = self; // 指定委托对象
// 设定动画选项
animation.duration = 2.5; // 动画时长
animation.repeatCount = 1; // 重复次数
// 终点设定
animation.toValue = [NSNumber numberWithFloat:100];; // 终点
// 添加动画
[myView.layer addAnimation:animation forKey:@"move-layer"];
・・・
/**
* 动画开始时
*/
- (void)animationDidStart:(CAAnimation *)theAnimation
{
NSLog(@"begin");
}
/**
* 动画结束时
*/
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag
{
NSLog(@"end");
}
注意点
CABasicAnimation正在进行动画的时候,点击了Home按钮后再回到app的时候,动画会被清空。
关键帧动画CAKeyframeAnimation,可以设置多个关键帧animation.values