ios开发之--CAKeyframeAnimation的详细用法
简单的创建一个带路径的动画效果,比较粗糙,不过事先原理都是一样的,
代码如下:
1,创建动画所需的view
-(void)creatView
{
moveView = [UIView new]; moveView.backgroundColor = [UIColor purpleColor]; moveView.frame = CGRectMake(, , , ); [self.view addSubview:moveView];
}
2,动画的实现:
方法一:
-(void)startAnimation
{
// 方法一 用法1 Value方式
//创建动画对象 CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; //设置value NSValue *value1=[NSValue valueWithCGPoint:CGPointMake(, )]; NSValue *value2=[NSValue valueWithCGPoint:CGPointMake(, )]; NSValue *value3=[NSValue valueWithCGPoint:CGPointMake(, )]; NSValue *value4=[NSValue valueWithCGPoint:CGPointMake(, )]; NSValue *value5=[NSValue valueWithCGPoint:CGPointMake(, )]; NSValue *value6=[NSValue valueWithCGPoint:CGPointMake(, )]; 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(, , , )); //设置开始位置 CGPathMoveToPoint(path,NULL,,); //沿着直线移动 CGPathAddLineToPoint(path,NULL, , ); CGPathAddLineToPoint(path,NULL, , ); CGPathAddLineToPoint(path,NULL, , ); CGPathAddLineToPoint(path,NULL, , ); CGPathAddLineToPoint(path,NULL, , ); //沿着曲线移动 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/, self.view.frame.size.height+, , )];
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-, self.addCartImg.layer.position.y-);//移动到起始点
// 沿着路径添加四曲线点移动
CGPathAddQuadCurveToPoint(path, NULL, , , self.view.frame.size.width, );
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 = ; // 为addCartImg添加旋转动画
[self.addCartImg.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
}
点击按钮,addCartImg会做一个旋转操作,并按照规定的路径进行移动,从而完成一个动画!
ios开发之--CAKeyframeAnimation的详细用法的更多相关文章
- iOS开发~CocoaPods使用详细说明 分类: ios相关 2015-04-01 16:45 68人阅读 评论(0) 收藏
iOS开发-CocoaPods使用详细说明 一.概要 iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用来 ...
- iOS开发~CocoaPods使用详细说明
一.概要 iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用来方便的统一管理这些第三方库. 二.安装 由于 ...
- iOS开发~CocoaPods使用详细说明【转】
一.概要 iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用来方便的统一管理这些第三方库. 二.安装 由于 ...
- ios 开发发布证书配置详细流程
iOS证书配置实践 本文参考了: iOS证书配置指南:http://dev.umeng.com/push/ios/license-configuration-guide 写在前面: 团队开发证书的管理 ...
- iOS 开发-- enum与typeof enum用法
一, 两者的用法 枚举类型定义用关键字enum标识,形式为: enum标识符 { 枚举数据表 }; enum用来定义一系列宏定义常量区别用,相当于一系列的#define ** **,当然它后面的标识符 ...
- IOS开发-CALayer和UIView详细汇总
1. CALayer和UIView之间的关系: 在iOS系统中,你能看得见摸得着的东西基本上都是UIView,比如UI控件.图标等等,都是UIView. 其实UIView之所以能显示在屏幕上,完 ...
- IOS开发 - TextField 控件详细
//初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, ...
- iOS开发--TableView详细解释
-.建立 UITableView DataTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)]; [Data ...
- IOS开发基础知识--碎片42
1:报thread 1:exc_bad_access(code=1,address=0x70********) 闪退 这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象( ...
随机推荐
- 初探InnoDB MVCC源码实现
1. 背景 本文基于MySQL InnoDB源码对InnoDB中非锁定一致性读是如何实现的作一些简单的探究. 2. 基本概念 2.1 隐藏字段 在经典之作<高性能MySQL>的1.4节中提 ...
- css实现不定高度的元素垂直居中问题
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Android ActionBar全然解析,使用官方推荐的最佳导航栏(上)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/18234477 本篇文章主要内容来自于Android Doc.我翻译之后又做了些加工 ...
- AJAX基础知识点学习
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/huangyibin628/article/details/28281003 1.AJAX(Async ...
- P1802 5倍经验日(01背包问题,水题)
题目背景 现在乐斗有活动了!每打一个人可以获得5倍经验!absi2011却无奈的看着那一些比他等级高的好友,想着能否把他们干掉.干掉能拿不少经验的. 题目描述 现在absi2011拿出了x个迷你装药物 ...
- 【转】一个域名是用哪里的DNS来解析的,电脑怎么知道找哪一个DNS呢? 我注册域名的时候会在服务商那里配置DNS解析,一般需要24小时后才能访问,我想知道,解析后的这个数据是不是会同步到世界上所有的DNS服务器呢!如果不是,当我访问我的这个域名的时候,电脑怎么知道去找到我注册的这一家的DNS服务器呢,谁告诉他的呢?
看看DNS一些基础知识,你就了解了.1.DNS就是域名服务器,他的任务就是确定域名的解析,比如A记录MX记录等等. 2.任何域名都至少有一个DNS,一般是2个.为什么要2个以上呢?因为DNS可以轮回处 ...
- mysql对String类型的数字值排序
一.需求:根据月份分组,然后再根据月份排序 效果图 sql如下: SELECT ) number, date_format(created_at,'%c') date FROM ********* W ...
- ubuntu和windows系统双系统的开机选项界面有很多无关选项
我的电脑是双系统,在进入系统选项的时候有很多无关的选项, 例如: 解决的方法是在终端输入 sudo gedit /boot/grub/grub.cfg 把文件多余的开机选项删除例如: 保存就可以,开机 ...
- Saltstack学习之二:target与模块方法的运行
对象的管理 saltstack系统中我们的管理对象叫做target,在master上我们可以采用不同的target去管理不同的minion,这些target都是通过去管理和匹配minion的id来做的 ...
- Kubernetes 1.10.4 镜像 版本
1. gcr.io/google-containers/hyperkube:1.10.4 gcr.io/google_containers/pause-amd64:3.0 gcr.io/google_ ...