粒子效果
2015-12-21 00:05
197 查看
04-粒子效果
整体思路:
手指在屏幕上移动时, 绘制出一条路径.路径上面可以有多条线.当点击开始绘制时,很多粒子根据绘制的路径开始移动. 创建一个粒子添加到控制器的View,开始时让粒子的x坐标负的.在界面上看不到粒子. 让控制器的View成为一个画板.手指在上面绘制,使能够绘制多条线.绘制完毕后,添加一个 帧动画. 把画板上绘制的路径当作是帧动画的路径 .把帧动画添加给创建的粒子,使粒子能够根据路径做移动的动画. 把当前的View的layer设置成为复制层,把粒子的份数设置30份,每个再设置一个延时动画,就会有一个个粒子移动的效果了.
实现方式:
1.创建路径,使控制器的View能够实现绘制多条线的功能.
保证要只有一条路径.所以路径只需要创建一份,在awakeFromNib方法中创建路径. 添加完手势,判断手势的状态,每次开始移动的时, 让路径重新设置起点. 手指移动的时候,添加一根线到当前手指所在的点.
实现代码为:
获取当前手指所在的点. CGPoint curP = [pan locationInView:self]; if (pan.state == UIGestureRecognizerStateBegan) { [self.path moveToPoint:curP]; }else{ [self.path addLineToPoint:curP]; [self setNeedsDisplay]; }
2.添加粒子
每一个粒子使用一个层来做.开始时让粒子的x值为负的. 创建粒子 CALayer *dotLayer = [CALayer layer]; dotLayer.frame = CGRectMake(-10, 0, 10, 10); dotLayer.backgroundColor = [UIColor greenColor].CGColor; self.dotLayer = dotLayer; [self.layer addSublayer:dotLayer];
3.当点击开始时创建帧动画动画
CAKeyframeAnimation *anim = [CAKeyframeAnimation animation]; anim.keyPath = @"position"; anim.path = self.path.CGPath; anim.repeatCount = MAXFLOAT; anim.duration = 2; [self.dotLayer addAnimation:anim forKey:nil];
4.让当前控制器的view成为复制层.
+(Class)layerClass{ return [CAReplicatorLayer class]; } 复制是控件 让动画延时执 ,就会有动画的效果. CAReplicatorLayer *repL = (CAReplicatorLayer *)self.layer; repL.instanceCount = 30; repL.instanceDelay = 0.2;
相关文章推荐
- ruby.new
- 倒影
- 音乐震动条
- php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
- 详解PHP实现执行定时任务
- PHP定时执行任务的3种方法详解
- 详解PHP执行定时任务的实现思路
- php阿拉伯数字转中文人民币大写
- 变量在 PHP7 内部的实现(一)
- 变量在 PHP7 内部的实现(二)
- 关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
- 反射调用private方法实践(php、java)
- Linux下从零开始安装配置Nginx服务器+PHP开发环境
- 在Mac OS上搭建Nginx+PHP+MySQL开发环境的教程
- Linux系统中设置多版本PHP共存配合Nginx服务器使用
- python如何实现远程控制电脑(结合微信)
- 基于python实现微信模板消息
- php防止CC攻击代码 php防止网页频繁刷新
- ffmpeg截取视频指定帧为图片,获取rotation信息并旋转
- mysql性能优化之索引优化