ios开发之--CAKeyframeAnimation的详细用法

简单的创建一个带路径的动画效果,比较粗糙,不过事先原理都是一样的,

代码如下:

1,创建动画所需的view

-(void)creatView
{
    moveView = [UIView new];

    moveView.backgroundColor = [UIColor purpleColor];

    moveView.frame = CGRectMake(0, 0, 30, 30);

    [self.view addSubview:moveView];
}

2,动画的实现:

方法一:

-(void)startAnimation
{
//    方法一 用法1? Value方式
    //创建动画对象

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

    //设置value

    NSValue *value1=[NSValue valueWithCGPoint:CGPointMake(100, 100)];

    NSValue *value2=[NSValue valueWithCGPoint:CGPointMake(200, 100)];

    NSValue *value3=[NSValue valueWithCGPoint:CGPointMake(200, 200)];

    NSValue *value4=[NSValue valueWithCGPoint:CGPointMake(100, 200)];

    NSValue *value5=[NSValue valueWithCGPoint:CGPointMake(100, 300)];

    NSValue *value6=[NSValue valueWithCGPoint:CGPointMake(200, 400)];

    animation.values=@[value1,value2,value3,value4,value5,value6];

    //重复次数 默认为1

    animation.repeatCount=MAXFLOAT;

    //设置是否原路返回默认为不

    animation.autoreverses = YES;

    //设置移动速度,越小越快

    animation.duration = 4.0f;

    animation.removedOnCompletion = NO;

    animation.fillMode = kCAFillModeForwards;

    animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

    animation.delegate=self;

    //给这个view加上动画效果

    [moveView.layer addAnimation:animation forKey:nil];

}

方法二:

//    用法2?  Path方式

    //创建动画对象

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

    //创建一个CGPathRef对象,就是动画的路线

    CGMutablePathRef path = CGPathCreateMutable();

    //自动沿着弧度移动

    CGPathAddEllipseInRect(path, NULL, CGRectMake(150, 200, 200, 100));

    //设置开始位置

    CGPathMoveToPoint(path,NULL,100,100);

    //沿着直线移动

    CGPathAddLineToPoint(path,NULL, 200, 100);

    CGPathAddLineToPoint(path,NULL, 200, 200);

    CGPathAddLineToPoint(path,NULL, 100, 200);

    CGPathAddLineToPoint(path,NULL, 100, 300);

    CGPathAddLineToPoint(path,NULL, 200, 400);

    //沿着曲线移动

    CGPathAddCurveToPoint(path,NULL,50.0,275.0,150.0,275.0,70.0,120.0);

    CGPathAddCurveToPoint(path,NULL,150.0,275.0,250.0,275.0,90.0,120.0);

    CGPathAddCurveToPoint(path,NULL,250.0,275.0,350.0,275.0,110.0,120.0);

    CGPathAddCurveToPoint(path,NULL,350.0,275.0,450.0,275.0,130.0,120.0);

    animation.path=path;

    CGPathRelease(path);

    animation.autoreverses = YES;

    animation.repeatCount=MAXFLOAT;

    animation.removedOnCompletion = NO;

    animation.fillMode = kCAFillModeForwards;

    animation.duration = 4.0f;

    animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];

    animation.delegate=self;

    [moveView.layer addAnimation:animation forKey:nil];}

按照上面的方法,即可实现一个动画,参照上面的逻辑可以实现添加购物车,删除等带路径的动画!

下面附一个添加购物车的动画效果:

1,创建动画view

-(void)relodata
{
    self.addCartImg = [[UIImageView alloc] initWithFrame:CGRectMake(self.view.frame.size.width/4, self.view.frame.size.height+10, 30, 30)];
    self.addCartImg.hidden = true;
    [self.view addSubview:self.addCartImg];
    self.addCartImg.image = [UIImage imageNamed:@"3.jpg"];
}

2,具体动画的实现:

- (IBAction)clickAddShopCartBtn:(id)sender {

    self.addCartImg.hidden = false;
//    创建动画对象
    CAKeyframeAnimation *keyframeAnimation=[CAKeyframeAnimation animationWithKeyPath:@"position"];
//    创建一个CGPathRef对象,就是动画的路线
    CGMutablePathRef path = CGPathCreateMutable();
//    设置开始位置
    CGPathMoveToPoint(path, NULL, self.addCartImg.layer.position.x-40, self.addCartImg.layer.position.y-40);//移动到起始点
//    沿着路径添加四曲线点移动
    CGPathAddQuadCurveToPoint(path, NULL, 100, 100, self.view.frame.size.width, 0);
    keyframeAnimation.path = path;
    keyframeAnimation.delegate = self;
    CGPathRelease(path);
    keyframeAnimation.duration = 0.7;
    [self.addCartImg.layer addAnimation:keyframeAnimation forKey:@"KCKeyframeAnimation_Position"];

//    旋转动画
    CABasicAnimation* rotationAnimation;
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 ];
    rotationAnimation.duration = 0.1;
    rotationAnimation.cumulative = YES;
    rotationAnimation.repeatCount = 50;

//    为addCartImg添加旋转动画
    [self.addCartImg.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
}

点击按钮,addCartImg会做一个旋转操作,并按照规定的路径进行移动,从而完成一个动画!

时间: 2024-10-17 02:33:54

ios开发之--CAKeyframeAnimation的详细用法的相关文章

iOS开发系列之二 - UILabel 用法小结

// 初始化标签 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 100, 300, 150)]; // 设置标签文字 label.text = @"This is a test text.This is a test text.This is a test text."; // 设置标签文字字体 // 使用系统字体 label.font = [UIFont systemFontOfSize:20]; //

iOS开发~CocoaPods使用详细说明

一.概要 iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用来方便的统一管理这些第三方库(从一个坑出来,又进了另一个坑而已--). 二.安装 由于网上的教程基本都大同小异,但细节之处还不是很完善,所以借机会在这里补充下: 注:要使用CocoaPods,那就要下载安装它,而下载安装CocoaPods需要Ruby环境 1.Ruby环境搭建 当前安装环境为Mac mini 10.8.5.Mac  OS本身自带

iOS开发~CocoaPods使用详细说明【转】

一.概要 iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用来方便的统一管理这些第三方库. 二.安装 由于网上的教程基本都大同小异,但细节之处还不是很完善,所以借机会在这里补充下: 注:要使用CocoaPods,那就要下载安装它,而下载安装CocoaPods需要Ruby环境 1.Ruby环境搭建 当前安装环境为Mac mini 10.8.5.Mac  OS本身自带Ruby,但还是更新一下保险,因为我第一

iOS开发中 Quartz2D使用详细 简介

1> Quartz2D简介 *  PPT简介 什么是Quartz2D?二维的绘图引擎 什么是二维?平面 什么是引擎?经包装的函数库,方便开发者使用.也就是说苹果帮我们封装了一套绘图的函数库 同时支持iOS和Mac系统什么意思?用Quartz2D写的同一份代码,既可以运行在iphone上又可以运行在mac上,可以跨平台开发. 开发中比较常用的是截屏/裁剪/自定义UI控件. Quartz2D在iOS开发中的价值就是自定义UI控件. 图形上下文的数据类型和作用. 有多少种上下文. 自定义控件的步骤.

iOS 开发-- enum与typeof enum用法

一, 两者的用法 枚举类型定义用关键字enum标识,形式为: enum标识符 { 枚举数据表 }; enum用来定义一系列宏定义常量区别用,相当于一系列的#define ** **,当然它后面的标识符也可当作一个类型标识符. typedef :typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int, char等)和自定义的数据类型(struct等) enum是枚举类型,有了typedef的理解容易看出,typedef enum定义了枚举类型,类

IOS开发-CALayer和UIView详细汇总

1.    CALayer和UIView之间的关系: 在iOS系统中,你能看得见摸得着的东西基本上都是UIView,比如UI控件.图标等等,都是UIView. 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个层(CALayer). 在创建UIView对象时,UIView内部会自动创建一个层(即CALayer对象),通过UIView的layer属性可以访问这个层.当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的层上,绘图完毕后,系统会

iOS开发--TableView详细解释

-.建立 UITableView DataTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)]; [DataTable setDelegate:self]; [DataTable setDataSource:self]; [self.view addSubview:DataTable]; [DataTable release]; 二.UITableView各Method说明 //Section总数 - (NS

iOS开发UI中Timer的用法

ViewController.m 文件 - (void)viewDidLoad { [super viewDidLoad]; //创建一个定时器 //定时器 创建就运行 //第一个参数 定时器执行时间间隔 //第二个参数 接受事件的对象 //第三个参数 定时器执行的方法 //第四个参数 nil //第五个参数 是否重复执行 如果为NO 可以理解为延时器 即过了多少秒才开始执行 而且只执行一次 NSTimer *timer = [NSTimer scheduledTimerWithTimeInte

iOS开发系列之二 – UILabel 用法小结

/ 初始化输入框并设置位置和大小UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 100, 300, 30)];// 设置输入框提示textField.placeholder = @"TextField Tip";// 输入框中预先输入的文字textField.text = @"预先输入的文字";// 设置输入框文本的字体textField.font = [UIFon