iOS-CAEmitterLayer(粒子效果)
扩展:https://github.com/lichtschlag/Dazzle
//创建出Layer
CAEmitterLayer *emitterLayer = [CAEmitterLayer layer];
//显示边框
emitterLayer.borderWidth = ;
//给定尺寸
emitterLayer.frame = CGRectMake(, , , );
// emitterLayer.masksToBounds = YES;
//发射点
emitterLayer.emitterPosition = CGPointMake(, );
//发射模式
emitterLayer.emitterMode = kCAEmitterLayerSurface;
//发射形状
emitterLayer.emitterShape = kCAEmitterLayerLine;
//添加Layer
[self.view.layer addSublayer:emitterLayer];
CAEmitterCell *cell = [CAEmitterCell emitterCell];
//粒子产生率
cell.birthRate = .f;
//粒子生命周期
cell.lifetime = .f;
//速度值
cell.velocity = ;
//速度值得微调值
cell.velocityRange = .f;
//y轴加速度
cell.yAcceleration = .f;
//发射角度(角度越大偏移越大)
cell.emissionRange = .f *M_1_PI;
//设置粒子颜色
// cell.color = [UIColor blackColor].CGColor;
//设置图片
cell.contents = (__bridge id)([UIImage imageNamed:@"test1"].CGImage);
emitterLayer.emitterCells = @[cell];
效果图:
例子:下雪下雨的封装
基类:WJCAEmitterLayerView
#import <UIKit/UIKit.h> @interface WJCAEmitterLayerView : UIView
/**
* 模仿setter getter方法
*/
- (void)setEmitterLayer:(CAEmitterLayer *)layer;
- (CAEmitterLayer *)emitterLayer; /**
* 显示当前View
*/
- (void)show;
/**
* 隐藏当前View
*/
- (void)hide; @end
#import "WJCAEmitterLayerView.h"
@interface WJCAEmitterLayerView () {
CAEmitterLayer *_emitterLayer;
}
@end
@implementation WJCAEmitterLayerView
+ (Class)layerClass {
return [CAEmitterLayer class];
}
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
_emitterLayer = (CAEmitterLayer *)self.layer;
}
return self;
}
- (void)setEmitterLayer:(CAEmitterLayer *)layer {
}
- (CAEmitterLayer *)emitterLayer {
return _emitterLayer;
}
- (void)show {
}
- (void)hide {
}
@end
封装下雪下雨view集成基类
下雪:
#import "SnowView.h"
@implementation SnowView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self initEmitterLayerProperties];
}
return self;
}
- (void)initEmitterLayerProperties {
//初始化一些参数
// self.emitterLayer.masksToBounds = YES;
self.emitterLayer.emitterShape = kCAEmitterLayerLine;
self.emitterLayer.emitterMode = kCAEmitterLayerSurface;
self.emitterLayer.emitterSize = self.frame.size;
self.emitterLayer.emitterPosition = CGPointMake(self.bounds.size.width/.f, );
}
- (void)show {
//添加 CAEmitterCell
CAEmitterCell *snowflake = [CAEmitterCell emitterCell];
snowflake.birthRate = .f;
snowflake.speed = .f;
snowflake.velocity = .f;
snowflake.velocityRange = .f;
snowflake.yAcceleration = .f;
snowflake.emissionRange = 0.5 *M_PI;
snowflake.spinRange = 0.25 *M_PI;
snowflake.contents = (__bridge id)([UIImage imageNamed:@"test1"].CGImage);
snowflake.color = [UIColor redColor].CGColor;
snowflake.lifetime = .f;
snowflake.scale = 0.5;
snowflake.scaleRange = 0.3;
//添加动画
self.emitterLayer.emitterCells = @[snowflake];
}
- (void)hide {
}
@end
下雨:
#import "RainView.h"
@implementation RainView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self initEmitterLayerProperties];
}
return self;
}
- (void)initEmitterLayerProperties {
//初始化一些参数
self.emitterLayer.masksToBounds = YES;
self.emitterLayer.emitterShape = kCAEmitterLayerLine;
self.emitterLayer.emitterMode = kCAEmitterLayerSurface;
self.emitterLayer.emitterSize = self.frame.size;
self.emitterLayer.emitterPosition = CGPointMake(self.bounds.size.width/.f, );
}
- (void)show {
//添加 CAEmitterCell
CAEmitterCell *snowflake = [CAEmitterCell emitterCell];
snowflake.birthRate = .f;
snowflake.speed = .f;
snowflake.velocity = .f;
snowflake.velocityRange = .f;
snowflake.yAcceleration = .f;
// snowflake.emissionRange = 0.5 *M_PI;
// snowflake.spinRange = 0.25 *M_PI;
snowflake.contents = (__bridge id)([UIImage imageNamed:@"test1"].CGImage);
snowflake.color = [UIColor greenColor].CGColor;
snowflake.lifetime = .f;
snowflake.scale = 0.2;
snowflake.scaleRange = .f;
//添加动画
self.emitterLayer.emitterCells = @[snowflake];
}
- (void)hide {
}
@end
调用:
WJCAEmitterLayerView *snoView = [[SnowView alloc]initWithFrame:CGRectMake(, ,CGRectGetWidth(self.view.bounds), )];
[self.view addSubview:snoView];
[snoView show];
// snoView.maskView = alpaView;可以让边缘模糊
iOS-CAEmitterLayer(粒子效果)的更多相关文章
- 雪花降落CAEmitterLayer粒子效果
CAEmitterLayer 实现雪花效果 首先需要导入#import <QuartzCore/QuartzCore.h> /**在iOS 5中,苹果引入了一个新的CALayer子 ...
- CAEmitterLayer 粒子效果(发射器)
//创建Layer CAEmitterLayer *emitterLayer = [CAEmitterLayer layer]; //边框 emitterLayer.borderWidth = 1.0 ...
- iOS动画开发之五——炫酷的粒子效果
在上几篇博客中,我们对UIView层的动画以及iOS的核心动画做了介绍,基本已经可以满足iOS应用项目中所有的动画需求,如果你觉得那些都还不够炫酷,亦或是你灵光一现,想用UIKit框架写出一款炫酷的休 ...
- iOS CAEmitterLayer 实现粒子发射动画效果
iOS CAEmitterLayer 实现粒子发射动画效果 效果图 代码已上传 GitHub:https://github.com/Silence-GitHub/CoreAnimationDemo 动 ...
- iOS 烟花撒花效果,图层渐变,图层倒影特效。CAEmitterLayer粒子发射器
iOS 烟花撒花效果,图层渐变,图层倒影特效.CAEmitterLayer粒子发射器 上一节我写了一个关于视图图层的相关类,有关CALayer这个类的使用和一些使用方法,详细看这里,就是我们在处理视图 ...
- iOS CALayer之CAEmitterLayer粒子发射器的神奇效果
https://www.jianshu.com/p/c54ffd7412e7 想必以前QQ空间的点赞效果大家都知道吧,点赞之后按钮周围会有一圈爆裂的小圆点:还有微信的红包雨表情动画等,以及烟花,火焰效 ...
- iOS 开发之粒子效果
本文由糖炒小虾.Benna翻译 ,校对:sai.u0u0.iven.子龙山人 iOS 5中的UIKit粒子系统教程 Ray的话:这是第15篇.也是最后一篇<iOS 5 盛宴>中的iOS 5 ...
- swift 实现漂亮的粒子效果CAEmitterLayer
一些粒子效果 我们经常会在一些游戏或者应用中看到一些炫酷的粒子效果,我们在iOS中也能很轻松的搞一些粒子效果 我们本次做得是一个下雪的效果,看下效果图 源码地址: https://github.com ...
- 能产生粒子效果的CAEmitterLayer
能产生粒子效果的CAEmitterLayer 下雪效果: // // RootViewController.m // Cell // // Copyright (c) 2014年 Y.X. All r ...
- 使用带粒子效果的 CAEmitterLayer
1.用CAEmitterLayer产生粒子效果 2.封装CAEmitterLayer 3.封装下雪.下雨的粒子效果控件 一.用CAEmitterLayer产生粒子效果 - (void)emitterL ...
随机推荐
- PAT乙级真题1001. 害死人不偿命的(3n+1)猜想 (15)(解题)
卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到n=1.卡拉兹在1950年的世界数 ...
- HDU1009
题意:有n个房子,每个房子里都有老鼠喜欢吃的咖啡豆J[i],但是每个房子都有猫看守,老鼠现在手上有M的猫粮.可以用猫粮换咖啡豆,每只猫都有猫粮的要求F[i].老鼠得到的咖啡豆是J[i]*a% ...
- js的reduce方法,改变头等函数
头等函数:把编程变成了类似搭积木的方式编码,可以使用很少的代码,实现强大的功能函数. eg: getTotal:数组的求和运算. var myArray = [1,2,3,4]; var add = ...
- 编译原理之lex,yacc学习
写在前面的几句废话 最近在项目的过程中接触了lex 和 yacc,他们可以帮助我们来实现自己的领域语言.最典型的应用就是可以帮助我们来实现自定义测试脚本的执行器.但是,这里也有一个限制,就是测试脚本要 ...
- hdu 4198 Quick out of the Harbour
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4198 Quick out of the Harbour Description Captain Cle ...
- js判断小数点几位
js如何判断小数点后有几位 <script> var n=3.143423423;alert(n.toString().split(".")[1].length); & ...
- php远程图片抓取存放到本地路径并生成缩略图
private function _getcontent($content) { $img_dir='../Public/Img/Ycimg'; //远程图片抓取存放 ...
- 用cmd命令合并N个文件
今天早上朋友发我一篇小说(42个TXT文件),让我给他合并为一个文件.我首先想到的是“Copy”命令,它可以复制文件,也可以合并文件. 例如:合并1.txt和2.txt到12.txt(其为ASCII文 ...
- text-overflow 与 word-wrap:设置使用一个省略标记...标示对象内文本的溢出。
text-overflow 与 word-wrap text-overflow用来设置是否使用一个省略标记(...)标示对象内文本的溢出. 语法: 但是text-overflow只是用来说明文字溢出时 ...
- 搭建SpringMVC+MyBatis开发框架六
建立Springmvc包结构 1.看看我们在springmvc.xml中曾经配置过扫描net.quickcodes这个包下面的所有java文件:  现在我们就在"src/main/java ...