iOS动画之粒子效果
来源:互联网 发布:淘宝助理商家编码 编辑:程序博客网 时间:2024/05/18 01:07
04.粒子动画
1.效果:
随机绘制一条路径,点击开始按钮,粒子动画
2.实现思路
1.搞个画板绘制路径,自定义view
2.给自定义view添加pan手势,和创建复制图层和圆形图层,只需要设置一次,在awakeFromNib方法中设置。
// 添加pan手势 UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)]; [self addGestureRecognizer:pan]; // 创建复制图层 CAReplicatorLayer *repLayer = [CAReplicatorLayer layer]; repLayer.frame = self.bounds; [self.layer addSublayer:repLayer]; // 创建粒子图层 CALayer *layer = [CALayer layer]; layer.cornerRadius = 5; layer.frame = CGRectMake(-100, 10, 10, 10); layer.backgroundColor = [UIColor whiteColor].CGColor; [repLayer addSublayer:layer]; _dotLayer = layer;
3.因为核心动画只能设置一个路径,因此只能创建一个路径,懒加载路径。
- (UIBezierPath *)path{ if (_path == nil) { _path = [UIBezierPath bezierPath]; } return _path;}
4.在一开始拖动的时候,保存路径起点,设置路径起点,拖动的时候每次添加线到某个点。
CGPoint curP = [pan locationInView:self]; if (pan.state == UIGestureRecognizerStateBegan) { _startP = curP; [self.path moveToPoint:_startP]; } [self.path addLineToPoint:curP]; [self setNeedsDisplay];
5.路径绘制好了,点击开始按钮的时候,添加动画到图层
CAKeyframeAnimation *anim = [CAKeyframeAnimation animation]; anim.keyPath = @"position"; anim.duration = 4; anim.path = self.path.CGPath; anim.repeatCount = MAXFLOAT; [_dotLayer addAnimation:anim forKey:@"anim"]; anim.delegate = self;
6.复制图层
repLayer.instanceCount = 20; repLayer.instanceDelay = 4 / 20.0; // 设置子层颜色 repLayer.instanceColor = [UIColor colorWithRed:0 green:1 blue:0 alpha:1].CGColor; // 设置子层颜色绿色通道偏移量 repLayer.instanceGreenOffset = -0.03;
7.重绘
清空路径,重新绘制,移除图层动画。
_path = nil; [_dotLayer removeAnimationForKey:@"anim"]; [self setNeedsDisplay];
3.全部代码
#import "DrawView.h"@interface DrawView ()@property (nonatomic, strong) UIBezierPath *path;@property (nonatomic, assign) CGPoint startP;@property (nonatomic, strong) CALayer *dotLayer;@property (nonatomic, strong) CAReplicatorLayer *repLayer;@property (nonatomic, strong) CAKeyframeAnimation *anim;@end@implementation DrawView- (UIBezierPath *)path{ if (_path == nil) { _path = [UIBezierPath bezierPath]; } return _path;}- (CAReplicatorLayer *)repLayer{ if (_repLayer == nil) { _repLayer = [CAReplicatorLayer layer]; _repLayer.instanceCount = 20; _repLayer.instanceDelay = 4 / 20.0; _repLayer.frame = self.bounds; // 设置子层颜色 _repLayer.instanceColor = [UIColor colorWithRed:0 green:1 blue:0 alpha:1].CGColor; // 设置子层颜色绿色通道偏移量 _repLayer.instanceGreenOffset = -0.03; } return _repLayer;}- (CALayer *)dotLayer{ if (_dotLayer == nil) { // 创建粒子图层 _dotLayer = [CALayer layer]; _dotLayer.cornerRadius = 5; _dotLayer.frame = CGRectMake(-100, 10, 10, 10); _dotLayer.backgroundColor = [UIColor whiteColor].CGColor; } return _dotLayer;}- (CAKeyframeAnimation *)anim{ if (_anim == nil) { _anim = [CAKeyframeAnimation animation]; _anim.keyPath = @"position"; _anim.duration = 4; _anim.repeatCount = MAXFLOAT; _anim.delegate = self; } return _anim;}- (void)awakeFromNib{ // 添加pan手势 UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)]; [self addGestureRecognizer:pan]; // 创建复制图层 [self.layer addSublayer:self.repLayer]; [self.repLayer addSublayer:self.dotLayer];}- (void)reDraw{ self.path = nil; [self.dotLayer removeAnimationForKey:@"anim"]; [self setNeedsDisplay];}- (void)startAnim{ self.anim.path = self.path.CGPath; [self.dotLayer addAnimation:self.anim forKey:@"anim"];}- (void)pan:(UIPanGestureRecognizer *)pan{ CGPoint curP = [pan locationInView:self]; if (pan.state == UIGestureRecognizerStateBegan) { _startP = curP; [self.path moveToPoint:_startP]; } [self.path addLineToPoint:curP]; [self setNeedsDisplay];}// Only override drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.- (void)drawRect:(CGRect)rect { // Drawing code [self.path stroke];}@end
4.Demo
https://github.com/Esdeath/ParticleEffects
0 0
- iOS动画之粒子效果
- IOS学习之核心动画-粒子效果
- IOS开发之粒子效果
- 十五 iOS 之 粒子效果
- canvas动画之文字粒子效果
- iOS动画开发之五——炫酷的粒子效果
- iOS动画开发之——炫酷的粒子效果
- IOS之动画效果
- iOS CoreAnimation-粒子动画
- iOS粒子动画
- iOS开发 - 粒子效果
- iOS 粒子效果
- iOS 粒子效果
- iOS动画之弹簧效果
- Canvas之粒子动画
- cocos2dx之粒子效果
- iOS 粒子效果 CAEmitterCell CAEmitterLayer
- ios粒子效果CAEmitteCell CAEmitterLayer
- redhat 9 vitualbox 虚拟机镜像 vdi 下载
- MKVToolNix v8.2
- linux mint vitualbox 虚拟机镜像 vdi 下载集合
- 算法日常
- 1160 蛇形矩阵
- iOS动画之粒子效果
- solaris vitualbox 虚拟机镜像 vdi 下载集合
- windows vitualbox 虚拟机镜像 vdi 下载集合
- 黑马程序员——JAVASE-IO流(下)
- 算法导论 第二十二章:拓扑排序
- mac os x vmware 虚拟机镜像 vmdk 下载集合
- iOS动画之倒影
- virtualbox 虚拟机软件下载集合
- rgocaupbnxj