CAEmitterLayer 粒子发射器类,父类CALayer。CALayer有很多子类。比如CAShapeLayer,CAGradientLayer等等。
CAEmitterLayer管理着CAEmitterCell,类似于tableView与cell的关系
相关API
1.属性
CAEmitterLayer的属性
NSArray<CAEmitterCell *>emitterCell 用来装粒子的数组
float birthRate 粒子产生系数 默认1.0 每秒钟粒子单元创建粒子数
float lifetime 粒子生命周期系数 存在时间,默认1.0
CGPoint emitterPosition 决定粒子发射形状的中心点 x,y中心位置默认(0,0)
CGSize emmtterSize 发射源的尺寸大小
CGFloat emitterDepth 景深深度。
上面2个属性更具emitterShaoe的情况,有些效果可能无效
NSString *emitterSHape 发射源的形状形状 枚举
/
定义发射形状,字符串类型,决定粒子的出口形态,系统会在emitterSize上进行修饰处理。可选项如下:
kCAEmitterLayerPoint 点的形状 ,粒子从一个点发出
kCAEmitterLayerLine 线的形状,粒子从一条线发出
kCAEmitterLayerRectangle 矩形形状,粒子从一个矩形中发出
kCAEmitterLayerCuboid 立方体形状,会影响Z平面的效果
kCAEmitterLayerCircle 圆形,粒子会在圆形范围发射
kCAEmitterLayerSphere 球型
/
NSString emitterMode 粒子发射模式 枚举
/
定义发射模式(相对于emitterShape,只会展示不同的效果),字符串类型。
kCAEmitterLayerPoints 从发射器两端点
kCAEmitterLayerOutline 从发射器边缘发出
kCAEmitterLayerSurface 从发射器表面发出
kCAEmitterLayerVolume 从发射器中发出
/
NSString renderMode 渲染模式
/
定义渲染模式,字符串类型。
kCAEmitterLayerUnordered 粒子是无序出现的
kCAEmitterLayerOldestFirst 声明久的粒子会被渲染在最上层
kCAEmitterLayerOldestLast 年轻的粒子会被渲染在最上层
kCAEmitterLayerBackToFront 粒子的渲染按照Z轴的前后顺序进行
kCAEmitterLayerAdditive 进行粒子混合
/
BOOL preservesDepth 是否开启三维空间效果, 默认NO
float velocity 增加粒子的速度 默认1
float scale 粒子的缩放大小 默认1
float spin。 粒子的旋转位置
2.CAEmitterCell的属性
NSString name 单元名称, 用户构造keyPath 默认空
BOOL enabled 控制此单元是否被emmiter渲染
float birthRate 粒子的创建速率 默认0
float lifetime。粒子的生存时间,单位秒 是平均值 默认0,
float lifetmeRange lifetimeRange描述的是粒子的生存时间容差 ,默认值0
粒子在Z轴方向的发射角度(弧度制)和 粒子在xy平面的发射角度(弧度制
CGFloat emissionLatitude/emissionLongitude
CGFloat emissionRange;粒子发射角度的容差(弧度制
粒子发射的速度和速度容差 默认都是0
CGFloat velocity/vilocityRange
CGFloat xAcceleration x方向的加速度矢量 默认0
CGFloat yAcceleration y方向的加速度矢量 默认0
CGFloat zAcceleration z方向的加速度矢量 默认0
CGFloat scale 粒子的缩放因子 系数 默认1
CGFloat scaleRange 缩放因子容差 默认0
CGFloat scaleSpeed 缩放速度
CGFloat spin 粒子选择速度
CGFloat spinRange 粒子旋转速度容差
CGColorRef color 粒子颜色默认值时纯白,
每个通道的色值容差,默认是(0, 0, 0, 0)
@property float redRange;
@property float greenRange;
@property float blueRange;
@property float alphaRange;
粒子每个颜色值的变化速度默认0,0,0,0 在lifetime的期间
float redSpeed
float greenSpeed
float blueSpeed
float alphaSpeed
id contents 粒子的内容
CGRect contentsRect 内容的范围 默认值时矩阵
CGFloat contentsScale 内容缩放因子
重点
1.CAEmitterCell决定生命状态的属性
lifetime,lifetimeRange:粒子在系统上的生命周期,存活时间,单位秒
birthRate:每秒钟产生粒子的数量 浮点数 单一粒子的话设置为0.1f
2.CAEmitterCell决定内容的属性
contents:为CGimageRef对象 一张图片
name:粒子名称,多个cell可以使用kvc监听
3.CAEmitterCell决定颜色状态的属性
color:粒子颜色属性,这个颜色属性的作用是给粒子上色 比如contents自身颜色的RGB值*colord的值 的到粒子最终的值
demo
// 1. 设置CAEmitterLayer
CAEmitterLayer * redpacketLayer = [CAEmitterLayer layer];
[self.view.layer addSublayer:redpacketLayer];
//self.redpacketLayer = redpacketLayer;
redpacketLayer.emitterShape = kCAEmitterLayerLine; // 发射源的形状 是枚举类型
redpacketLayer.emitterMode = kCAEmitterLayerSurface; // 发射模式 枚举类型
redpacketLayer.emitterSize = self.view.frame.size; // 发射源的size 决定了发射源的大小
redpacketLayer.emitterPosition = CGPointMake(self.view.bounds.size.width * 0.5, -10); // 发射源的位置 控制粒子发射器位置x,y
redpacketLayer.birthRate = 1.f; // 每秒产生的粒子数量的系数 控制粒子发射暂停和开始
// 2. 配置cell
CAEmitterCell * snowCell = [CAEmitterCell emitterCell];
snowCell.contents = (id)[[UIImage imageNamed:@"timg.jpg"] CGImage]; // 粒子的内容 是CGImageRef类型的
snowCell.birthRate = 5.f; // 每秒产生的粒子数量
snowCell.lifetime = 20.f; // 粒子的生命周期
// snowCell.velocity = 0.1f; // 粒子的速度
snowCell.yAcceleration = 100.f; // 粒子再y方向的加速的
snowCell.scale = 0.1; // 粒子的缩放比例 控制粒子大小
redpacketLayer.emitterCells = @[snowCell]; // 粒子添加到CAEmitterLayer上