1、效果图展示

2、实现思路

  1> 首先要实现上面的效果,第一步要处理的就是一个简单的画板,在View上面用鼠标滑动的时候画出线条,这个功能可使用UIBezierPath实现

  2> 关于粒子效果的实现,可以创建一个CALayer,然后用CAReplicatorLayer进行复制layer,从而达到粒子效果

3、代码实现

DrawView类的封装与编写

//
// DrawView.m
// 06-粒子效果
//
// Created by xgao on 16/11/24.
// Copyright (c) 2016年 xgao. All rights reserved.
// #import "DrawView.h" // 复制的实例个数
static int _instansCount = ; @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 = ;
layer.frame = CGRectMake(, -, wh, wh);
layer.cornerRadius = wh / ;
layer.backgroundColor = [UIColor blueColor].CGColor;
// 将layer添加到CAReplicatorLayer中
[_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];
} // 鼠标按住移动
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ // 获取touch对象
UITouch *touch = [touches anyObject];
// 获取当前触摸点
CGPoint curP = [touch locationInView:self]; // 添加线到某个点
[_path addLineToPoint:curP]; // 重绘
[self setNeedsDisplay]; _instansCount ++;
} - (void)drawRect:(CGRect)rect { // 进行路径线条的绘制
[_path stroke];
} #pragma mark - 开始动画
- (void)startAnim{ // 创建帧动画
CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];
anim.keyPath = @"position";
anim.path = _path.CGPath;
anim.duration = ;
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 = ;
}
@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中一个简单的粒子效果实现的更多相关文章

  1. iOS中XMPP简单聊天实现 好友和聊天

    版权声明本文由陈怀哲首发自简书:http://www.jianshu.com/users/9f2e536b78fd/latest_articles;微信公众号:陈怀哲(chenhuaizhe2016) ...

  2. 如何让IOS中的文本实现3D效果

    本转载至 http://bbs.aliyun.com/read/181991.html?spm=5176.7114037.1996646101.25.p0So7c&pos=9       zh ...

  3. Css实现一个简单的幻灯片效果页面

    使用animation动画实现一个简单的幻灯片效果. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...

  4. python中一个简单的webserver

     python中一个简单的webserver 2013-02-24 15:37:49 分类: Python/Ruby 支持多线程的webserver   1 2 3 4 5 6 7 8 9 10 11 ...

  5. CSS布局中一个简单的应用BFC的例子

    什么是BFC BFC(Block Formatting Context),简单讲,它是提供了一个独立布局的环境,每个BFC都遵守同一套布局规则.例如,在同一个BFC内,盒子会一个挨着一个的排,相邻盒子 ...

  6. 使用CSS实现一个简单的幻灯片效果

    方法一: 简单的CSS代码实现幻灯片效果 方法二: 使用CSS3 Animation来制作幻灯片 方法一: 简单的CSS代码实现幻灯片效果 话不多说,直接上代码 <!DOCTYPE html&g ...

  7. iOS中 超简单抽屉效果(MMDrawerController)的实现

    ios开发中,展示类应用通常要用到抽屉效果,由于项目需要,本人找到一个demo,缩减掉一些不常用的功能,整理出一个较短的实例. 首先需要给工程添加第三方类库 MMDrawerController: 这 ...

  8. 谈谈iOS中粘性动画以及果冻效果的实现

    在最近做个一个自定义PageControl——KYAnimatedPageControl中,我实现了CALayer的形变动画以及CALayer的弹性动画,效果先过目: https://github.c ...

  9. 转:谈谈iOS中粘性动画以及果冻效果的实现

    在最近做个一个自定义PageControl——KYAnimatedPageControl中,我实现了CALayer的形变动画以及CALayer的弹性动画,效果先过目: 先做个提纲: 第一个分享的主题是 ...

随机推荐

  1. cookie转CookieCollection

    CookieCollection cookiesResponse = new CookieCollection(); if (response != null) { foreach (string c ...

  2. 如何通过VIM把代码格式化后生成HTML网页代码

    本文转自http://wangxiaoyu.blog.51cto.com/922065/203471 需求及思路:演示需要,需要网站上嵌入一些代码,我的建议做法是根据代码文件,生成相应的HTML代码, ...

  3. css笔记05:表单

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...

  4. Android(java)学习笔记88:TextView属性大全

    TextView属性大全: android:autoLink       设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/email/ph ...

  5. CASS转ARCGIS

    本文转载千浪兄弟博客 1.先看看这张图:CASS的扩展属性 ("south" (1000 . "310000")) 对应图斑属性编码“310000”,(&quo ...

  6. request 和response 中的setCharacterEncoding区别

    response和request的setCharacterEncoding 一.request.setCharacterEncoding():是设置从request中取得的值或从数据库中取出的值. 指 ...

  7. python(5)-正则表达式

    数量词的贪婪模式与非贪婪模式 正则表达式通常用于在文本中查找匹配的字符串.Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符:非贪婪的则相反,总是尝试匹配尽 ...

  8. python(5) - 冒泡排序

    data = [10, 4, 33, 21, 54, 3, 8, 11, 5, 22, 2, 1, 17, 13] ''' 思路:有多少个元素就循环多少次,每次循环从第一个元素开始与它后面的元素比较, ...

  9. python(1) - 输入和输出

    前面已经说过了,print()函数括号里加上字符串,就可以实现输出 >>> print('This is Python!') This is Python! print()函数也可以 ...

  10. PHP用反撇号(`,也就是键盘上ESC键下面的那个,和~在同一个上面)执行外部命令

    例如: echo `whoami`; // 导出数据库,要导入的文件夹必须要有可写权限, -u -p之后的内容必须要紧挨着写 echo `mysqldump -h localhost -u$DbUse ...