CAEmitterLayer简介

一、CAEmitterLayer 粒子发生器

  1. CAEmitterLayer用于实现基于Core Animation的粒子发生器系统。
  2. 在粒子系统中,CAEmitterLayer负责发射粒子(当然粒子也可以发射粒子),而这些所谓的粒子,就是CAEmitterCell,我们可以将CAEmitterLayer比作是CAEmitterCell的工厂,它会按照你的设置来以不同的样式不断产生粒子,也就是CAEmitterCell。
  3. CAEmitterLayer决定了粒子从什么样的几何特性上发射出来,这个几何特性包括了位置,形状,大小。另外还有一些渲染相关的特性。另外的一些属性是CAEmitterLayer和CAEmiiterCell都有的,CAEmitterLayer的这些属性会作为CAEmitterCell相同属性的系数,例如当CAEmitterCell的lifetime(生命周期)为1,其所属CAEmitterLayer的lifetime为2时,在其它参数选择默认值的情况下,这个CAEmitterCell的生命周期就是1*2=2秒,2秒后,CAEmitterCell就会从粒子系统中被移除。
  4. CAEmitterCell则决定了粒子自身的一些特征,例如速度,加速度,发射的范围,颜色等等。这些属性大多是以“中间值”搭配一个“范围”(A mean and a “cone”)的方式来表示的,例如velocity和velocityRange。表示CAEmitterCell的初始速度为velocity ± velocityRange。

二、CAEmitterLayer 常用属性

1、粒子产生系数,默认1.0;每个cell的产生率乘以这个粒子产生系数,得出每一秒粒子的创建个数。 即:cell.birthRate 乘以 layer.birthRate =每秒粒子产生个数
@property float birthRate;
2、发射源的中心位置,默认(0,0,0)
@property CGPoint emitterPosition; //决定了粒子发射形状的中心点
@property CGFloat emitterZPosition;
3、emitterSize发射源的尺寸大小,emitterDepth决定粒子形状的深度联系(不太清楚,待补充)
@property CGSize emitterSize;//决定了粒子发射形状的大小
@property CGFloat emitterDepth;
4、发射源的形状,默认 kCAEmitterLayerPoint
@property(copy) NSString *emitterShape;//粒子从什么形状发射出来,它并不是表示粒子自己的形状。
为什么叫做“发射形状”呢? 看看emitterShape的枚举,你就会大概能明白了
emitterShape的枚举:
kCAEmitterLayerPoint //点
kCAEmitterLayerLine //直线
kCAEmitterLayerRectangle //矩形
kCAEmitterLayerCuboid //3D立方形
kCAEmitterLayerCircle //圆形
kCAEmitterLayerSphere //3D球
5、发射模式, 默认kCAEmitterLayerVolume
@property(copy) NSString *emitterMode;
有以下取值:
kCAEmitterLayerPoints // 顶点
kCAEmitterLayerOutline // 轮廓,即边上
kCAEmitterLayerSurface // 表面,即图形的面积内
kCAEmitterLayerVolume // 容积,即3D图形的体积内
6、渲染模式, 默认kCAEmitterLayerUnordered
@property(copy) NSString *renderMode;
有以下取值:
kCAEmitterLayerUnordered
kCAEmitterLayerOldestFirst
kCAEmitterLayerOldestLast
kCAEmitterLayerBackToFront
kCAEmitterLayerAdditive
7、粒子的生命周期系数,默认1.0
即:(cell.lifetime 乘以 layer.lifetime)等于粒子的生命周期
@property float lifetime;
8、装粒子的数组
@property(nullable, copy) NSArray<CAEmitterCell *> *emitterCells;
9、不清楚待续,默认NO
@property BOOL preservesDepth;
10、粒子速度系数, 默认1.0
即:(cell.velocity 乘以 layer.velocity)等于粒子的速度
@property float velocity;
11、粒子的缩放比例系数, 默认1.0
即:(cell.scale 乘以 layer.scale)等于粒子的缩放比例
@property float scale;
12、自旋转速度系数, 默认1.0
即:(cell.spin 乘以 layer.spin)等于粒子的自旋转速度
13、随机数发生器
@property unsigned int seed;

三、CAEmitterCell 常用属性

1、粒子的创建
+ (instancetype)emitterCell;
2、根据键获得值
+(nullable id)defaultValueForKey:(NSString *)key;
是否归档键值
- (BOOL)shouldArchiveValueForKey:(NSString *)key;
3、粒子的名字,默认nil.
@property(nullable, copy) NSString *name;
4、不清楚待续...
@property(getter=isEnabled) BOOL enabled;
5、粒子的产生率,默认0
@property float birthRate;
6、粒子的生命周期和生命周期的范围,以秒为单位。两者默认0
@property float lifetime;
@property float lifetimeRange;
7、emissionLongitude指定了经度,经度角代表了x-y轴平面上与x轴之间的夹角
emissionLatitude指定了纬度,纬度角代表了x-z轴平面上与x轴之间的夹角,两者默认0:
@property CGFloat emissionLatitude;
@property CGFloat emissionLongitude;
8、周围发射角度,默认0
@property CGFloat emissionRange;
9、速度和速度范围,两者默认0
@property CGFloat velocity;
@property CGFloat velocityRange;
10、x,y,z方向上的加速度分量,三者默认都是0
@property CGFloat xAcceleration;
@property CGFloat yAcceleration;
@property CGFloat zAcceleration;
11、缩放比例,缩放比例范围缩放比例范围缩放比例范围,缩放比例和缩放范围默认是0
@property CGFloat scale;
@property CGFloat scaleRange;
@property CGFloat scaleSpeed;
12、自旋转角度,自旋转角度的范围,默认都是0
@property CGFloat spin;
@property CGFloat spinRange;
13、粒子的颜色,默认白色
@property(nullable) CGColorRef color;
14、粒子颜色blue,red,green,alpha能改变的范围,默认0
@property float redRange;
@property float greenRange;
@property float blueRange;
@property float alphaRange;
15、粒子颜色透明度,blue,green,red在生命周期内的改变速度,默认都是0
@property float redSpeed;
@property float greenSpeed;
@property float blueSpeed;
@property float alphaSpeed;
16、粒子的内容,大多都是个CGImageRef的对象,既粒子要展现的图片,默认nil
@property(nullable, strong) id contents;
17、应该画在contents里的子rectangle,默认(0,0,1,1)
@property CGRect contentsRect;
18、画在contents里的内容的比例因子
@property CGFloat contentsScale;
19、渲染'内容'图像时使用的滤波器参数。
@property(copy) NSString *minificationFilter;
@property(copy) NSString *magnificationFilter;
@property float minificationFilterBias;
20、粒子发射的粒子
@property(nullable, copy) NSArray<CAEmitterCell *> *emitterCells;
21、不清楚待续...
@property(nullable, copy) NSDictionary *style;

四、实例

效果图:

代码:


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

推荐阅读更多精彩内容