iOS-利用粒子发射器(CAEmitterLayer) 制作发射动画
CAEmitterLayer,是CALayer子类,自iOS 5.0以后推出,是一个高性能的粒子引擎,被用来创建实时粒子动画;
CAEmitterCell,类似于一个CALayer,自带一个contents属性,用于设定CGImage图像;
CAEmitterLayer可以理解为是CAEmitterCell的容器,可以包含多种CAEmitterCell的cells;
结果如下图:
粒子图片素材
文章图片
运行结果
文章图片
文章图片
【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];
推荐阅读
- 了解自然大气粒子对气候的影响
- Cesium|Cesium 粒子系统学习
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- iOS-Swift-map|iOS-Swift-map filter reduce、函数式编程
- 【万伽复利】什么是复利(如何利用复利赚钱?)
- 苹果手机如何利用库乐队自制铃声
- “没有利用价值的人是很受冷遇的。”
- 可悲的好人
- 利用好你的暗时间,让成长无处不在
- 如何利用漏斗模型增加转化率减少流失率()