首页 > 代码库 > IOS中一个简单的粒子效果实现
IOS中一个简单的粒子效果实现
1、效果图展示
2、实现思路
1> 首先要实现上面的效果,第一步要处理的就是一个简单的画板,在View上面用鼠标滑动的时候画出线条,这个功能可使用UIBezierPath实现
2> 关于粒子效果的实现,可以创建一个CALayer,然后用CAReplicatorLayer进行复制layer,从而达到粒子效果
3、代码实现
DrawView类的封装与编写
//// DrawView.m// 06-粒子效果//// Created by xiaomage on 15/6/24.// Copyright (c) 2015年 xiaomage. All rights reserved.//#import "DrawView.h"@interface DrawView ()@property (nonatomic, strong) UIBezierPath *path;@property (nonatomic, weak) CALayer *dotLayer;@property (nonatomic, weak) CAReplicatorLayer *repL;@end@implementation DrawView#pragma mark - 懒加载点层- (CALayer *)dotLayer{ if (_dotLayer == nil) { // 创建图层 CALayer *layer = [CALayer layer]; CGFloat wh = 10; layer.frame = CGRectMake(0, -1000, wh, wh); layer.cornerRadius = wh / 2; layer.backgroundColor = [UIColor blueColor].CGColor; [_repL addSublayer:layer]; _dotLayer = layer; } return _dotLayer;}- (UIBezierPath *)path{ if (_path == nil) { _path = [UIBezierPath bezierPath]; } return _path;}#pragma mark - 开始点击调用- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ // 获取touch对象 UITouch *touch = [touches anyObject]; // 获取当前触摸点 CGPoint curP = [touch locationInView:self]; // 设置起点 [self.path moveToPoint:curP]; }static int _instansCount = 0;- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ // 获取touch对象 UITouch *touch = [touches anyObject]; // 获取当前触摸点 CGPoint curP = [touch locationInView:self]; // 添加线到某个点 [_path addLineToPoint:curP]; // 重绘 [self setNeedsDisplay]; _instansCount ++; }// Only override drawRect: if you perform custom drawing.// An empty implementation adversely affects performance during animation.- (void)drawRect:(CGRect)rect { // Drawing code [_path stroke];}#pragma mark - 开始动画- (void)startAnim{ // 创建帧动画 CAKeyframeAnimation *anim = [CAKeyframeAnimation animation]; anim.keyPath = @"position"; anim.path = _path.CGPath; anim.duration = 3; anim.repeatCount = MAXFLOAT; [self.dotLayer addAnimation:anim forKey:nil]; // 注意:如果复制的子层有动画,先添加动画,在复制 // 复制子层 _repL.instanceCount = _instansCount; // 延迟图层动画 _repL.instanceDelay = 0.2; }#pragma mark - 加载完xib调用,创建复制层- (void)awakeFromNib{ // 创建复制层 CAReplicatorLayer *repL = [CAReplicatorLayer layer]; repL.frame = self.bounds; [self.layer addSublayer:repL]; _repL = repL;}#pragma mark - 重绘- (void)reDraw{ // 清空绘图信息 _path = nil; [self setNeedsDisplay]; // 把图层移除父控件,复制层也会移除。 [_dotLayer removeFromSuperlayer]; _dotLayer = nil; // 清空子层总数 _instansCount = 0; }@end
DrawView的使用
// 点击开始动画- (IBAction)startAnim:(id)sender { DrawView *view = (DrawView *)self.view; [view startAnim]; }// 重置按钮- (IBAction)reDraw:(id)sender { DrawView *view = (DrawView *)self.view; [view reDraw];}
IOS中一个简单的粒子效果实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。