iOS-利用粒子发射器(CAEmitterLayer) 制作发射动画

CAEmitterLayer,是CALayer子类,自iOS 5.0以后推出,是一个高性能的粒子引擎,被用来创建实时粒子动画;
CAEmitterCell,类似于一个CALayer,自带一个contents属性,用于设定CGImage图像;
CAEmitterLayer可以理解为是CAEmitterCell的容器,可以包含多种CAEmitterCell的cells;
结果如下图:
粒子图片素材
iOS-利用粒子发射器(CAEmitterLayer) 制作发射动画
文章图片

运行结果
iOS-利用粒子发射器(CAEmitterLayer) 制作发射动画
文章图片

iOS-利用粒子发射器(CAEmitterLayer) 制作发射动画
文章图片

【iOS-利用粒子发射器(CAEmitterLayer) 制作发射动画】发送形状的样式: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];

    推荐阅读