CAAnimationGroup-倒入垃圾桶实例

// {

IBOutlet UIImageView *_imageView;

IBOutlet UIImageView *_bushImageView;

}

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

_imageView =[[UIImageView alloc]initWithFrame:CGRectMake(50, 100, 76, 76)];

[_imageView setImage:[UIImage imageNamed:@"c"]];

[self.view addSubview:_imageView];

//设置圆角

_imageView.layer.cornerRadius =10;

//设置剪裁

_imageView.layer.masksToBounds =YES;

//打开_imageView点击事件

_imageView.userInteractionEnabled =YES;

UILongPressGestureRecognizer *longPress =[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(selec)];

[_imageView addGestureRecognizer:longPress];

}

- (void)selec{

[self addBtn];

//创建动画数组

CAAnimationGroup *group =[CAAnimationGroup animation];

CAAnimation *animation0=[self rotationAnimation];

CAAnimation *animation1 =[self rotationAnimation];

group.animations [email protected][animation0,animation1];

//次数

group.repeatCount =HUGE_VALF;

//动画时间 动画组的时间 可以和内部各个动画的时间不同

group.duration =.2f;

[_imageView.layer addAnimation:group forKey:@"group"];

}

//图标摇晃

- (CAKeyframeAnimation *)rotationAnimation{

CAKeyframeAnimation *animation =[CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"];

animation.duration =.2f;

double angle =M_PI_4/16.f;

animation.values [email protected][@(-angle),@(angle),@(-angle)];

return animation;

}

//图标位移

- (CAKeyframeAnimation *)positionAnimation{

CAKeyframeAnimation *animation =[CAKeyframeAnimation animationWithKeyPath:@"transform.translation"];

animation.duration =.2f;

CGFloat offset =1;

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

NSValue *value2 =[NSValue valueWithCGPoint:CGPointMake(-offset, offset)];

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

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

animation.values [email protected][value1,value2,value3,value4];

return animation;

}

//创建删除按钮

- (void)addBtn{

UIButton *btn =[UIButton buttonWithType:UIButtonTypeCustom];

btn.frame =CGRectMake(0, 0, 20, 20);

[btn setImage:[UIImage imageNamed:@"button_icon_close"] forState:UIControlStateNormal];

[btn addTarget:self action:@selector(del) forControlEvents:UIControlEventTouchUpInside];

[_imageView addSubview:btn];

}

- (void)del{

CAAnimationGroup *group =[CAAnimationGroup animation];

group.animations [email protected][[self animation0],[self animation1],[self animation2]];

group.duration =1;

[_imageView.layer addAnimation:group forKey:@"up"];

}

//transform.scale缩放

- (CABasicAnimation *)animation2{

CABasicAnimation *animation =[CABasicAnimation animationWithKeyPath:@"transform.scale"];

animation.fromValue [email protected];

animation.toValue [email protected];

animation.beginTime =.75;

animation.duration =.2f;

//如果想让图层保持 显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为kCAFillModeForwards

animation.removedOnCompletion =NO;

animation.fillMode =kCAFillModeForwards;

return animation;

}

//修改透明度 opacity

- (CABasicAnimation *)animation1{

CABasicAnimation *animation =[CABasicAnimation animationWithKeyPath:@"opacity"];

animation.fromValue [email protected];

animation.toValue [email protected];

animation.beginTime =.75;

animation.duration =.2f;

//如果想让图层保持 显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为kCAFillModeForwards

animation.removedOnCompletion =NO;

animation.fillMode =kCAFillModeForwards;

return animation;

}

//抛物线动画

- (CAKeyframeAnimation *)animation0{

//使用path属性,只能修改position 而不能用transform.translation

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

//创建路径

CGMutablePathRef path =CGPathCreateMutable();

//移动到某一点

CGPathMoveToPoint(path, NULL, _imageView.layer.position.x, _imageView.layer.position.y);

//计算向上的贝塞尔曲线的终止点

CGPoint toPoint =CGPointMake(_imageView.center.x+(_bushImageView.center.x-_imageView.center.x)/2, _imageView.center.y-100);

//计算control点

CGPoint cp1 =CGPointMake(_imageView.center.x+30, toPoint.y);

//第一个贝塞尔曲线

CGPathAddQuadCurveToPoint(path, NULL, cp1.x, cp1.y, toPoint.x, toPoint.y);

//第二个贝塞尔曲线点

CGPathAddQuadCurveToPoint(path, NULL, _bushImageView.center.x, cp1.y, _bushImageView.center.x, _bushImageView.center.y);

animation.path =path;

CGPathRelease(path);

//设置动画时间,和动画组时间一致

animation.duration =1;

//设置三次修改path完成的时间点

animation.keyTimes [email protected][@0,@.3,@1];

//设置path对应的 timeingFunction

animation.timingFunctions [email protected][[CAMediaTimingFunction functionWithName:@"easeOut"],[CAMediaTimingFunction functionWithName:@"easeOut"],[CAMediaTimingFunction functionWithName:@"easeIn"]];

return animation;

}

时间: 2024-10-17 12:02:38

CAAnimationGroup-倒入垃圾桶实例的相关文章

别再用枸杞泡水了,白活几十年竟然不知道!

别再用枸杞泡水了,白活几十年竟然不知道! 2016-03-01 电视.电脑.手机等电子产品 让人们的眼睛越来越疲劳, 视力越来越下降, 于是, 很多人喜欢用枸杞泡水或煲汤, 其实这种做法并不理想, 想达到护眼明目的最佳效果, 正确的方法是干嚼枸杞! 枸杞富含多种氨基酸.生物碱.玉米黄素.枸杞多糖.胡萝卜素.硫胺素.核黄素及多种矿物质等,有辅助降血糖.降血压的功效,能够抑制脂肪在肝脏细胞内沉积,能降低胆固醇,促使肝细胞新生,有延缓衰老抗疲劳的作用. 生活中,很多人喜欢用枸杞泡水.煲汤或煮粥,但实际

iOS:核心动画之动画组CAAnimationGroup

CAAnimationGroup——动画组 动画组,是CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行 属性说明: –animations:用来保存一组动画对象的NSArray 默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间 具体的实例如下: 实现功能:在创建的动画组中存入两个基本动画,一个是沿着Z轴旋转360度的动画,另一个是放大2倍的动画,这两个动画并

手机抓包软件Charles安装使用实例 (流媒体播放测试可去下载的时刻检测)

手机抓包软件Charles安装使用实例 浏览:5258 发布日期:2015/07/17 分类:技术分享 关键字: 手机抓包软件 Charles 大胡子的博客Charles安装使用实例 Charles安装 手机抓包软件Charles 因为项目要用到,于是折腾了下,现在把自己做的笔记发出来,有兴趣的可以看看,避免大家走弯路 更多技术文章请访问: http://www.dahuizhi.com Charles上的设置要截取iPhone上的网络请求,我们首先需要将Charles的代理功能打开.在Char

SQL实例整理

下面整理了一些实例(实例主要来自网上),以提升自己写SQL的某些关键字的理解. 1.用一条SQL 语句 查询出每门课都大于80 分的学生姓名.(表结构如下图) 答案可以有如下两种: select distinct student_name from table_test_one where student_name not in   (select distinct student_name from table_test_one where score<=80); 或者 select stud

漏洞挖掘方法之静态扫描+经典栈溢出实例

标 题: 漏洞挖掘方法之静态扫描+经典栈溢出实例 时 间: 2014-02-11,01:52:50 这是笔者公开发表的关于漏洞挖掘的第二篇文章,与发第一篇的时间差不多间隔了整整一年,在这一年里虽然工作细碎,但我还是抽出了大量的时间关注安全,因为当初的既定目标就是走安全的路.这一年了也做了不少关于安全方面的事情,比如参加各大*SRC的漏洞提交什么的,曾今有一段时间也是走火入魔了一样,但是后来我停下来了,因为我觉得那种事情偏离我最初对"漏洞"挖掘的定义,看了那些提交的所谓"漏洞&

zabbix监控多个tomcat实例--自动发现

参考:http://www.iyunv.com/thread-227674-1-1.html 1.上传 catalina-jmx-remote.jar, cmdline-jmxclient-0.10.3.jar, jmx_discovery.sh 和 add_service_tomcat.sh 到 /tmp/目录下 2.给 add_service_tomcat.sh 赋执行权限,并执行 执行完这个脚本之后,需要重启你的tomcat服务,和zabbix_agentd的服务 3  cat  add_

文件操作实例

1.文件操作之bytes模式 1.除了上篇所介绍的'r','w','a'只读只写只追加模式外,大家可能意识到一个问题就是这种操作只能对纯文本的文件进行操作,然而现在很多文件都是带有图片或者音频视频的文件,那该如何操作执行文件呢?接下来介绍文件操作其他三种类似模式 我们上面的'r','w','a'起始都是'rt','wt','at'即文本文件操作的只读只写只追加,要想操作文本文件以外的文件类型,那就需要在这个t的位置上做一些手脚了,对于非文本文件,我们只能使用b模式,"b"表示以字节的方

python实例:利用jieba库,分析统计金庸名著《倚天屠龙记》中人物名出现次数并排序

本实例主要用到python的jieba库 首先当然是安装pip install jieba 这里比较关键的是如下几个步骤: 加载文本,分析文本 txt=open("C:\\Users\\Beckham\\Desktop\\python\\倚天屠龙记.txt","r", encoding='utf-8').read() #打开倚天屠龙记文本 words=jieba.lcut(txt) #jieba库分析文本 对数据进行筛选和处理 for word in words:

solr分布式索引【实战一、分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例】

1 private static Properties prop = new Properties(); 2 3 private static String confFilePath = "conf" + File.separator + "config.properties";// 配置文件目录 4 static { 5 // 加载properties 6 InputStream is = null; 7 InputStreamReader isr = null;