iOS-粒子系统

iOS的粒子系统是通过CAEmitterCell创建,然后通过CAEmitterLayer发射层进行发射。 导入框架#import <QuartzCore>

  • 下面介绍CAEmitterCell的基本属性
 + (instancetype)emitterCell;// UIKit根据这个发射粒子和定义的基础上创建一个随机粒子。此原型包括一些属性来控制粒子的图片,颜色,方向,运动,缩放比例和生命周期。

 @property(nullable) CGColorRef color; //粒子的颜色

 @property float alphaRange;// 一个粒子的颜色alpha能改变的范围

 @property float alphaSpeed; //粒子透明度在生命周期内的改变速度

 @property float redRange; 
 @property float greenRange; 
 @property float blueRange; ///一个粒子的颜色blue,green,red能改变的范围

 @property float redSpeed; 
 @property float greenSpeed; 
 @property float blueSpeed; ///一个粒子blue,green,red在生命周期内改变的速度

 @property(nullable, strong) id contents; //粒子要展现的图片,CGImageRef类型,否则不显示

 @property CGRect contentsRect; //渲染的范围

 @property CGFloat emissionLatitude; //发射Z轴方向的发射角度

 @property CGFloat emissionLongitude; //粒子在xy平面的发射角度

 @property CGFloat emissionRange; //粒子发射角度的容差

 @property(nullable, copy) NSArray<CAEmitterCell> *emitterCells; //粒子发射的粒子

 @property(getter=isEnabled) BOOL enabled; //粒子是否允许发射器渲染

 @property float lifetime;// 粒子生存时间

 @property float lifetimeRange; //粒子生存时间范围,设置之后 lifetime +/-= lifetimeRange

 @property(copy) NSString *minificationFilter; 
 @property(copy) NSString *magnificationFilter;// 减小,增加自己的大小

 @property float minificationFilterBias;// 减少大小的因子

 @property(nullable, copy) NSString *name; //粒子的名字

 @property CGFloat scale; //粒子缩放大小

 @property CGFloat scaleRange; //粒子缩放范围

 @property CGFloat scaleSpeed; //粒子缩放速度

 @property CGFloat spin; //旋转角度

 @property CGFloat spinRange; //旋转角度范围

 @property CGFloat velocity; //粒子的速度

 @property CGFloat velocityRange;// 粒子速度范围

 @property CGFloat xAcceleration;
 @property CGFloat yAcceleration;
 @property CGFloat zAcceleration; //粒子在x,y,x方向的加速度

发射层CAEmitterLayer属性

  + (instancetype)layer;
  // 由很多emitterCell组成的发射层,控制粒子的形状,发射位置,提供了一个粒子发射器系统为核心的动画

  @property(nullable, copy) NSArray<CAEmitterCell> *emitterCells; 
  //装着   CAEmitterCell对象的粒子单元数组,被用于把粒子投放到layer上

  @property CGPoint emitterPosition; //发射器在xy平面的中心位置

  @property CGFloat emitterZPosition;// 发射器的Z平面位置

  @property CGSize emitterSize; //发射器的尺寸大小

  @property CGFloat emitterDepth; //发射器的深度,在某些模式下会产生立体效果

  @property(copy) NSString *emitterMode; //发射模式

  kCAEmitterLayerPoints //从发射器中发出 
  kCAEmitterLayerOutline //从发射器边缘发出
  kCAEmitterLayerSurface //从发射器表面发出 
  kCAEmitterLayerVolume //从发射器中点发出

  @property(copy) NSString *emitterShape; //发射器的形状

  kCAEmitterLayerPoint //点的形状,粒子从一个点出发 
  kCAEmitterLayerLine //线的形状,粒子从一条线出发 
  kCAEmitterLayerRectangle //矩形形状,粒子从一个矩形出发 
  kCAEmitterLayerCuboid //立方体形状,会影响Z平面的效果 
  kCAEmitterLayerCircle //圆形,粒子会在圆形范围发射 kCAEmitterLayerSphere 球形
 
  @property(copy) NSString *renderMode;// 渲染模式

  kCAEmitterLayerUnordered //这种模式下,粒子是无序出现的,多个发射源将混合        
  kCAEmitterLayerOldestFirst //这种模式下,生命久的粒子会被渲染在最上层       
  kCAEmitterLayerOldestLast// 这种模式下,年轻的粒子会被渲染在最上层   
  kCAEmitterLayerBackToFront //这种模式下,粒子的渲染按照Z轴的前后顺序进行          
  kCAEmitterLayerAdditive //这种模式会进行粒子混合
  @property BOOL preservesDepth; //是否开启三维空间效果

  @property float birthRate; //粒子产生速度 默认为1.0

  @property float lifetime; //粒子存活时间,默认为1s

  @property float scale; //粒子的缩放大小

  @property unsigned int seed; //用于初始化随机数产生的粒子

  @property float spin; //粒子的旋转位置

  @property float velocity;// 粒子的运动速度

写几行代码用起来

 CAEmitterLayer *fireEmitter = [CAEmitterLayer layer];
 fireEmitter.emitterPosition = CGPointMake(self.view.frame.size.width/2.0,    
 self.view.frame.size.height - 60);
 fireEmitter.emitterSize = CGSizeMake( 50, 0);
 fireEmitter.emitterShape = kCAEmitterLayerLine;
 fireEmitter.renderMode  = kCAEmitterLayerAdditive;
 //火焰
 CAEmitterCell* fire = [CAEmitterCell emitterCell];
 [fire setName:@"fire"];

 fire.birthRate   = 500;
 fire.emissionLongitude  = M_PI;
 fire.velocity   = -80;
 fire.velocityRange  = 30;
 fire.emissionRange  = 1.1;
 fire.yAcceleration  = -200;
 fire.scaleSpeed   = 0.3;
 fire.lifetime   = 1;
 fire.lifetimeRange  = 0.35;

 fire.color = [[UIColor colorWithRed:0.8 green:0.4 blue:0.2 alpha:0.1] CGColor];
 fire.contents = (id) [[UIImage imageNamed:@"DazFire"] CGImage];

 //烟雾
 CAEmitterCell* smoke = [CAEmitterCell emitterCell];
 [smoke setName:@"smoke"];

 smoke.birthRate   = 11;
 smoke.lifetime   = 4;
 smoke.velocity   = -40;
 smoke.velocityRange  = 20;
 smoke.emissionRange  = M_PI / 4;
 smoke.spinRange   = 6;
 smoke.yAcceleration  = -160;
 smoke.scale    = 0.1;
 smoke.alphaSpeed  = -0.12;
 smoke.scaleSpeed  = 0.7;

 smoke.contents   = (id) [[UIImage imageNamed:@"DazSmoke"] CGImage];
 smoke.color = [[UIColor colorWithWhite:0.5 alpha:0.3]CGColor];

 fireEmitter.emitterCells = @[smoke,fire];
 [self.view.layer addSublayer:fireEmitter];

产生火焰效果,抄录一下,哪天要用的时候就不用到处找了,谢谢大神的分享!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容