iOS动画开发-核心动画编程[CoreAnimation]

本文详细介绍了iOS中CoreAnimation的使用步骤,包括CABaseAnimation的实例化与关键路径注册、动画属性设定、开始值与结束值的设置,以及如何添加动画。此外,还探讨了组合动画、动画开始和结束事件的处理,提醒开发者注意CABasicAnimation在后台切换后可能被清除的问题。同时,文章提及了关键帧动画CAKeyframeAnimation,允许设置多个关键帧值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用步骤

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值