CAEmitterLayer
CAEmitterLayer是Core Animation中的特殊图层,继承自CALayer,是一个粒子发射器,用于控制粒子效果
属性
下面着重介绍下常用的属性
emitterShape
:决定发射源的形状,并不是粒子的形状emitterMode
:发射模式,决定发射区域在发射源的哪一部分emitterSize
:发射源的尺寸大小emitterPosition
:发射源的重心点位置renderMode
:渲染模式emitterCells
:粒子样式数组,每一个粒子就是一个CAEmitterCell
其中 emitterShape 、 emitterMode、renderMode都是枚举类型
emitterShape:发射源的形状
发射源的形状有以下几种
emitterMode:发射模式
发射模式有以下几种
renderMode:渲染模式
渲染模式有以下几种
注:每秒粒子产生的个数 = layer.birthRate * cell.birthRate
CAEmitterCell
CAEmitterCell是粒子的样式类,用来创建粒子,类似于UITableView中的cell,同时也可以复用
属性
下面着重介绍下常用的属性
lifetime
:粒子生命周期,即存活时间,单位是秒birthRate
:粒子的产生率,即每秒产生多少粒子的个数contents
:粒子的内容,通常为CGImageRef的对象,将提供的图片从UIImage转换为CGImageRef类型name
:粒子的名字,即粒子的唯一标识,可以KVC通过name拿到粒子的需要修改的属性color
:粒子的颜色,会结合contents的颜色来决定粒子的最终颜色,如果想完全通过color来控制cell的颜色,最好设置一张白色的图片redSpeed & greenSpeed & blueSpeed & alphaSpeed
:color中RGBA的取值范围,默认还0,范围是[0,1],如果cell的color
设置为[[UIColor colorWithRed:0.5 green:0.4 blue:0.5 alpha:1] CGColor];
,在设置redSpeed & greenSpeed & blueSpeed & alphaSpeed全部为0.1,对应的RGB取值范围是R(0.1, 0.5)、G(0.1,0.4 )、B(0.1, 0.5)、A(0.1, 1.0)
velocity & velocityRange
: 粒子的初始速度和范围xAcceleration & yAcceleration & zAcceleration
:分别是x、y、z轴上的加速度,当为正数时,向坐标轴的正方向加速,反之,向负方向加速scale & scaleRange
:粒子的缩放比例及范围,缩放比例默认是0,范围是[0,1]
以下是实现的几种的粒子效果图示
- 粽子雨、红包雨等粒子效果
点赞按钮的粒子效果
点赞粒子效果
类似烟花的粒子效果
下雨的粒子效果
以上的几种效果的实现就不一一详细说明了.
粒子效果实现的一般步骤
接下来总结粒子效果实现的步骤:
- 利用
CAEmitterLayer
创建粒子图层layer,即发射源,并添加到视图的layer上 - 设置发射源的属性,例如:emitterShape、emitterMode、emitterSize、emitterPosition等
- 通过
CAEmitterCell
创建粒子cell - 设置粒子的相关属性,例如contents、birthRate、lifetime、speed等
- 将粒子cell添加到发射源的
emitterCells
数组中
部分示例代码如下:
- (void)zongZiRain{ // 1、设置CAEmitterLayer CAEmitterLayer *rainLayer = [CAEmitterLayer layer]; // 2、在背景图上添加粒子图层 [self.view.layer addSublayer:rainLayer]; self.rainlayer = rainLayer; // 3、发射形状--线性 rainLayer.emitterShape = kCAEmitterLayerLine; //发射模式 rainLayer.emitterMode = kCAEmitterLayerSurface; //发射形状的大小 rainLayer.emitterSize = self.view.frame.size; //发射的中心点位置 rainLayer.emitterPosition = CGPointMake(self.view.bounds.size.width*0.5, -10); // 4、配置cell CAEmitterCell *cell = [CAEmitterCell emitterCell]; //粒子图片 cell.contents = (id)[[UIImage imageNamed:@"zongzi2.jpg"] CGImage]; //每秒钟创建的粒子对象,默认是0 cell.birthRate = 1.0; //粒子的生存周期,以s为单位,默认是0 cell.lifetime = 30; //粒子发射的速率,默认是1 cell.speed = 2; //粒子的初始平均速度及范围,默认为0 cell.velocity = 10.0f; cell.velocityRange = 10.0f; //y方向的加速度矢量,默认是0 cell.yAcceleration = 60; //粒子的缩放比例及范围,默认是[1,0] cell.scale = 0.05; cell.scaleRange = 0.0f; // 5、添加到图层上 rainLayer.emitterCells = @[cell]; }