核心动画之CAKeyframeAnimation

本文深入解析了关键帧动画(CAKeyframeAnimation)的工作原理及应用,对比CABasicAnimation,介绍如何通过设置关键帧(values)、时间点(keyTimes)及路径(path),实现复杂动画效果,适合iOS开发者学习。

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

1.关键帧动画,也是CAPropertyAnimation的子类,与CABasicAnimation的区别是

CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而 CAKeyframeAnimation会使用一个NSArray保存这些数值 

2.属性说明:

values:上述的NSArray对象。里面的元素称为“关键帧”(keyframe)。动画对象会在指定 的时间(duration)内,依次显示values数组中的每一个关键帧

path:可以设置一个CGPathRef、CGMutablePathRef,让图层按照路径轨迹移动。path 只对CALayer的anchorPoint和position起作用。如果设置了path,那么values将被忽略

keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的 每一个时间值都对应values中的每一帧。如果没有设置keyTimes,各个关键帧的时间是平分的

CABasicAnimation可看做是只有2个关键帧的CAKeyframeAnimation 

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

 

    [self moveAction];

    

}

 

-(void)moveAction{

    

    //1 创建动画对象

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

   

    //2 设置

    animation.duration = 3;

    

    /*

    //关键帧

    CGPoint p0 = self.myImageVIew.center;

    NSValue *v0 = [NSValue valueWithCGPoint:p0];

    

    CGPoint p1 = CGPointMake(300, 100);

    NSValue *v1 = [NSValue valueWithCGPoint:p1];

    

    CGPoint p2 = CGPointMake(200, 400);

    NSValue *v2 = [NSValue valueWithCGPoint:p2];

    

    animation.values = @[v0,v1,v2,v0];

     

     */

    

    //path:沿着路径移动

    CGMutablePathRef path = CGPathCreateMutable();

    

    CGPoint startP = self.myImageVIew.center;

    CGPathMoveToPoint(path, NULL, startP.x, startP.y);

    

    CGPoint cp = CGPointMake(200, 0);

    CGPoint cp1 = CGPointMake(200, 400);

    CGPoint cp2 = CGPointMake(300, 500);

    

    //绘制贝塞尔曲线

    CGPathAddCurveToPoint(path, NULL, cp.x, cp.y, cp1.x, cp1.y, cp2.x, cp2.y);

    

    //设置动画的执行路径

    animation.path = path;

    

    //3 添加

    [self.myImageVIew.layer addAnimation:animation forKey:@"move"];

    

    //注意:release

    CGPathRelease(path);

  

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

转载于:https://www.cnblogs.com/xiaodiandian/p/5774223.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值