美文网首页
CALayer子类五、CAEmitterLayer

CALayer子类五、CAEmitterLayer

作者: Carson_Zhu | 来源:发表于2018-02-09 04:08 被阅读17次

    简介

    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

          本文链接:https://www.haomeiwen.com/subject/snixtftx.html