美文网首页
粒子效果---CAEmitterLayer粒子发射器简单实现

粒子效果---CAEmitterLayer粒子发射器简单实现

作者: 384b68c260d2 | 来源:发表于2016-09-28 15:26 被阅读92次

    CAEmitterLayer是layer上一种类似于粒子发射器的存在,可以通过设定CAEmitterCell的属性来达到不同的效果,例如天气中的下雨,下雪效果。现在我们来将过程简单实现。
    1.定义发射器---CAEmitterLayer

    //创建发射器
        CAEmitterLayer *emitterLayer = [CAEmitterLayer layer];
        //设定起始点
        emitterLayer.emitterPosition = CGPointMake(self.view.bounds.size.width/2.f, 0);
        //设定发射模式
        emitterLayer.emitterMode = kCAEmitterLayerSurface;
        //设定发射形状
        emitterLayer.emitterShape = kCAEmitterLayerLine;
        //设定发射范围
        emitterLayer.emitterSize = self.view.frame.size;
     //把发射器添加到视图的layer上
        [self.view.layer addSublayer:emitterLayer];
    

    2.定义发射的粒子内容----CAEmitterCell

    //创建粒子
        CAEmitterCell *cell = [CAEmitterCell emitterCell];
        //每秒钟发射的个数(0 ~ x个)
        cell.birthRate = 10;
        //粒子的存在时间
        cell.lifetime = 120;
        //粒子的存在时间变化范围 (lifetime +- range)
        cell.lifetimeRange = 10;
        //粒子的初始速度值
        cell.velocity = 0;
        //粒子的速度值变化范围
        cell.velocityRange = 3;
        //粒子的加速度(Y轴方向)
        cell.yAcceleration = 5;
        //粒子发射角度范围
        cell.emissionRange = 4 * M_1_PI;
        //粒子颜色
        cell.color = [UIColor blackColor].CGColor;
        //设置粒子图片 --比如我要发射雪花
        cell.contents = (__bridge id)([UIImage imageNamed:@"SnowW"].CGImage);
        
        //让CAemitterLayer 与CAEmitterCell产生关联
        emitterLayer.emitterCells = @[cell];
    

    这样一个简单的粒子发射器就实现了,效果如下

    05509318-34B0-43CF-AED6-B7E5551DC14D.png

    还有一些可能会用到的属性,或者类型枚举:
    CAEmitterLayer:

    //发射源的形状
    emitter shapeemitterShape:
    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;

    CAEmitterCell:
    @property CGFloat xAcceleration; //x轴加速度
    @property CGFloat yAcceleration;//Y轴加速度
    @property CGFloat zAcceleration;//z轴加速度

    @property CGFloat scale;//缩放比例(0~1)
    @property CGFloat scaleRange;//比例变化范围(scale + - range)
    @property CGFloat scaleSpeed;//比例变化速度

    @property CGFloat spin;//旋转角度
    @property CGFloat spinRange;//旋转角度变化范围

    @property float redRange;//红色变化范围
    @property float greenRange;//绿色变化范围
    @property float blueRange;//蓝色变化范围
    @property float alphaRange;//透明度变化范围

    相关文章

      网友评论

          本文标题:粒子效果---CAEmitterLayer粒子发射器简单实现

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