CAEmitterLayer 粒子效果

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上
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章