CAEmitterLayer,是CALayer子类,自iOS 5.0以后推出,是一个高性能的粒子引擎,被用来创建实时粒子动画;
CAEmitterCell,类似于一个CALayer,自带一个contents属性,用于设定CGImage图像;
CAEmitterLayer可以理解为是CAEmitterCell的容器,可以包含多种CAEmitterCell的cells;
发送形状的样式:emitterShape
发送形状的样式:emitterShape
CA_EXTERN NSString * const kCAEmitterLayerPoint 点
CA_EXTERN NSString * const kCAEmitterLayerLine 线
CA_EXTERN NSString * const kCAEmitterLayerRectangle 举行
CA_EXTERN NSString * const kCAEmitterLayerCuboid 立方体
CA_EXTERN NSString * const kCAEmitterLayerCircle 曲线
CA_EXTERN NSString * const kCAEmitterLayerSphere 圆形
发送的样式:emitterMode
发送的样式:emitterMode
CA_EXTERN NSString * const kCAEmitterLayerPoints 以点的方式 默认样式
CA_EXTERN NSString * const kCAEmitterLayerOutline 线的样式
CA_EXTERN NSString * const kCAEmitterLayerSurface 以面的形式
CA_EXTERN NSString * const kCAEmitterLayerVolume 以团的样式
粒子出现的样式:renderMode
粒子出现的样式:renderMode
CA_EXTERN NSString * const kCAEmitterLayerOldestFirst最后一个出生的粒子在第一个
CA_EXTERN NSString * const kCAEmitterLayerOldestLast最后出生的就在最后一个
CA_EXTERN NSString * const kCAEmitterLayerBackToFront把后面的放到上面
CA_EXTERN NSString * const kCAEmitterLayerAdditive叠加效果
粒子的属性
粒子的属性
contents:粒子的内容
lifetime:存活时间
birthRate:每秒发送粒子数量
lifetimeRange:存活时间的范围
birthRate:每秒的粒子生成的数量
emissionLatitude:散发的维度 他表示的是一个弧度 上下
emissionLongitude:散发的经度 ->弧度 ->左右
velocity:发送的速度 速度越快发送的越远->动力
velocityRange:发送速度的范围
xAcceleration; x,y,z轴的加速度 惯性 动力
yAcceleration;
zAcceleration;
emissionRange:散发的范围 ->弧度 ->范围
name:粒子的名字 可以通过名字 找到粒子
具体代码实现步骤:
1、定义一个CAEmitterLayer属性
@interface ViewController ()
@property (nonatomic ,strong)CAEmitterLayer *emitterLayer;
@end
2、懒加载CAEmitterLayer
//懒加载离子发射器
- (CAEmitterLayer *)emitterLayer{
if (_emitterLayer) {
return _emitterLayer;
}
_emitterLayer = [[CAEmitterLayer alloc]init];
[self.view.layer addSublayer:_emitterLayer];
_emitterLayer.backgroundColor = [UIColor blackColor].CGColor;
return _emitterLayer;
}
3、定位离子发射器发射点的位置
//定位离子发射器发射点的位置
self.emitterLayer.emitterPosition = self.view.center;
self.view.backgroundColor = [UIColor blackColor];
4、设置粒子发送器每秒钟发送粒子数量
//设置粒子发送器每秒钟发送粒子数量
self.emitterLayer.birthRate = 3;
5、初始化粒子颗粒,并添加图片
//初始化粒子颗粒1,并添加图片
CAEmitterCell *cell = [CAEmitterCell emitterCell];
cell.contents = (id)[UIImage imageNamed:@"红花"].CGImage;
//初始化粒子颗粒2,并添加图片
CAEmitterCell *cell1 = [CAEmitterCell emitterCell];
cell1.contents = (id)[UIImage imageNamed:@"花叶"].CGImage;
//初始化粒子颗粒3,并添加图片
CAEmitterCell *cell2 = [CAEmitterCell emitterCell];
cell2.contents = (id)[UIImage imageNamed:@"树叶"].CGImage;
6、设置粒子散发参数
/** * 设置红花散发参数 */
// 粒子的出生量
cell.birthRate = 2;
// 存活时间
cell.lifetime = 5;
cell.lifetimeRange = 1;
// 设置粒子发送速度
cell.velocity = 50;
cell.velocityRange = 30;
// 粒子发送的方向
cell.emissionLatitude = M_PI;
// 发送粒子的加速度
cell.zAcceleration = -100;
// 散发粒子的范围 -> 弧度
cell.emissionRange = 2*M_PI;
/** * 设置花叶散发参数 */
// 粒子的出生量
cell1.birthRate = 3;
// 存活时间
cell1.lifetime = 3;
cell1.lifetimeRange = 2;
// 设置粒子发送速度
cell1.velocity = 50;
cell1.velocityRange = 120;
// 粒子发送的方向
cell1.emissionLongitude = 2*M_PI;
// 发送粒子的加速度
cell1.xAcceleration = 100;
// 散发粒子的范围 -> 弧度
cell1.emissionRange = 2*M_PI;
/** * 设置树叶散发参数 */
// 粒子的出生量
cell2.birthRate = 3;
// 存活时间
cell2.lifetime = 3;
cell2.lifetimeRange = 1;
// 设置粒子发送速度
cell2.velocity = 80;
cell2.velocityRange = 150;
// 粒子发送的方向
cell2.emissionLatitude = M_PI;
// 发送粒子的加速度
cell2.zAcceleration = -100;
// 散发粒子的范围 -> 弧度
cell2.emissionRange = 2*M_PI;
7、把粒子的cell添加到粒子发送器emitterLayer中
//把粒子的cell添加到粒子发送器
self.emitterLayer.emitterCells = @[cell,cell1,cell2];