CALayer子类五、CAEmitterLayer

简介

CAEmitterLayer是一个高性能的粒子引擎,被用来创建实时例子动画如:烟雾,火,雨等等这些效果。

属性

  • emitterCells
    装着CAEmitterCell对象的数组,被用于把粒子投放到layer上。
  • birthRate
    粒子产生系数,默认1.0。
  • lifetime
    粒子生命周期。
  • emitterPosition
    发射位置。
  • emitterZPosition
    发射源的z坐标位置。
  • emitterSize
    发射源的尺寸大。
  • emitterDepth
    决定粒子形状的深度联系:emittershape
  • emitterShape
    发射源的形状。
    NSString * const kCAEmitterLayerPoint;
    NSString * const kCAEmitterLayerLine;
    NSString * const kCAEmitterLayerRectangle;
    NSString * const kCAEmitterLayerCuboid;
    NSString * const kCAEmitterLayerCircle;
    NSString * const kCAEmitterLayerSphere;
    
  • emitterMode
    发射模式。
    NSString * const kCAEmitterLayerPoints;
    NSString * const kCAEmitterLayerOutline;
    NSString * const kCAEmitterLayerSurface;
    NSString * const kCAEmitterLayerVolume;
    
  • renderMode
    渲染模式。
    NSString * const kCAEmitterLayerUnordered;
    NSString * const kCAEmitterLayerOldestFirst;
    NSString * const kCAEmitterLayerOldestLast;
    NSString * const kCAEmitterLayerBackToFront;
    NSString * const kCAEmitterLayerAdditive;
    
  • preservesDepth
    不是多很清楚(粒子是平展在层上)。
  • velocity
    粒子速度。
  • scale
    粒子的缩放比例。
  • spin
    自旋转速度。
  • seed
    用于初始化随机数产生的种子。

实例

  • 火焰
    //创建粒子引擎
    CAEmitterLayer *emitter = [CAEmitterLayer layer];
    emitter.frame = self.view.bounds;
    [self.view.layer addSublayer:emitter];
      
    //设置属性
    emitter.renderMode = kCAEmitterLayerAdditive;
    emitter.emitterPosition = CGPointMake(emitter.frame.size.width / 2.0, emitter.frame.size.height / 2.0);
      
    //粒子模板
    CAEmitterCell *cell = [[CAEmitterCell alloc] init];
    cell.contents = (__bridge id)[UIImage imageNamed:@"snow"].CGImage;
    cell.birthRate = 150;
    cell.lifetime = 5.0;
    cell.color = [UIColor colorWithRed:1 green:0.5 blue:0.1 alpha:1.0].CGColor;
    cell.alphaSpeed = -0.4;
    cell.velocity = 50;
    cell.velocityRange = 50;
    cell.emissionRange = M_PI * 2.0;
      
    //加入模板数组
    emitter.emitterCells = @[cell];
    

    运行效果:
  • 雪花
    - (void)configSnowEmitterLayer {
      // 生成一个CAEmitterLayer
      CAEmitterLayer *snowEmitterLayer = [CAEmitterLayer layer];
      // 生成粒子的位置
      snowEmitterLayer.emitterPosition = CGPointMake(self.view.bounds.size.width/2, -30);
      // 生成粒子的区域大小
      snowEmitterLayer.emitterSize = CGSizeMake(self.view.bounds.size.width*2, 0);
      
      // 设置粒子发射模式
      snowEmitterLayer.emitterMode = kCAEmitterLayerOutline;
      // 设置粒子源的形状
      snowEmitterLayer.emitterShape = kCAEmitterLayerLine;
      
      // 设置layer的透明度,圆角等
      snowEmitterLayer.shadowOpacity = 1.0;
      snowEmitterLayer.shadowRadius = 0.0;
      snowEmitterLayer.shadowOffset = CGSizeMake(0.0, 1.0f);
      snowEmitterLayer.shadowColor = [[UIColor whiteColor] CGColor];
      
      // 设置发射出的粒子单元
      snowEmitterLayer.emitterCells = [NSArray arrayWithObject:[self createSnowCell]];
      
      // 添加到layer
      [self.view.layer addSublayer:snowEmitterLayer];
    }
    
    - (CAEmitterCell *)createSnowCell {
      // 创建粒子单元
      CAEmitterCell *snowCell = [CAEmitterCell emitterCell];
      
      snowCell.birthRate = 5.0f;// 每秒生成例子频率
      snowCell.lifetime = 120.f; // 粒子系统的生命周期
      
      snowCell.velocity = 10;   // 粒子速度
      snowCell.velocityRange = 10; // 粒子速度范围
      snowCell.yAcceleration = 5; // 粒子y方向的加速度分量
      snowCell.emissionRange = 0.5 * M_PI; // 周围发射角度
      snowCell.spinRange = 0.25 * M_PI;  // 旋转角度
      snowCell.contents = (id)[[UIImage imageNamed:@"snow"] CGImage]; // 粒子显示内容
      snowCell.color = [[UIColor colorWithRed:0.600 green:0.658 blue:0.743 alpha:1.000] CGColor]; // 粒子颜色
      
      return snowCell;
    }
    

    运行效果:

你可能感兴趣的:(CALayer子类五、CAEmitterLayer)