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. 为CentOS 加入�本地源

    首先把光盘中的Packages文件夹复制到本地. [arm@Jarvis Packages]$ pwd /home/Packages 安装用于创建安装包依赖关系的软件createrepo. [arm@ ...

  2. Android 进阶学习:事件分发机制全然解析,带你从源代码的角度彻底理解(上)

    http://blog.csdn.net/guolin_blog/article/details/9097463 事实上我一直准备写一篇关于Android事件分发机制的文章,从我的第一篇博客開始,就零 ...

  3. android 自定义按钮实现 home键 和返回键

    由于在自己做的东西中用到了就总结一下,自己做了测试 在一个程序运行中如果按 返回键  分别执行了 : onpause()     onStop()   onDestory()方法 如果点击 home键 ...

  4. Javascript-显示系统时间

    /*JS-显示系统时间*/function showLocale(objD) {    var str, colorhead, colorfoot;    var yy = objD.getYear( ...

  5. Python学习 之 包和模块

    1.rpm -ql python #查看python在计算机中安装了哪些文件 2.模块是一个可以导入的Python脚本文件 包是一堆按目录组织的模块和子包,目录下的__init__.py文件存放了包的 ...

  6. IP101A芯片默认物理地址(PHY Adress)确定

    转载:http://blog.csdn.net/ropai/article/details/6961157 根据IP101A的DataSheet,芯片的第9,10,12,13,15脚为PHYAD0~P ...

  7. assets

    我们知道assets/和res/文件夹用于存放可在应用程序中的使用文件. assets/用于存储各种应用程序中需要的文件(例如配置文件或音频文件等),这些文件会打包在Android应用程序中. res ...

  8. 小白日记22:kali渗透测试之提权(二)--抓包嗅探

    抓包嗅探 通过抓包嗅探目标机器的流量,发现账号密码. Windows系统 1.Wirehshark 2.Omnipeek 3.commview 4.Sniffpass 只会抓取识别传输密码的明文协议, ...

  9. Steps to disable DRLs with GM Tech2 scanner

    It is possible to get daytime running time disabled manually. But the problem can be easily settled ...

  10. (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。

    floyd解法 今天初看dijkstra,先拿这两题练手,其他变形题还是不是很懂. 模版题,纯练打字... HDU 1874: #include <cstdio> #define MAXN ...