美文网首页
iOS-粒子系统

iOS-粒子系统

作者: hyeeyh | 来源:发表于2016-10-14 17:28 被阅读229次

    iOS的粒子系统是通过CAEmitterCell创建,然后通过CAEmitterLayer发射层进行发射。 导入框架#import <QuartzCore>

    • 下面介绍CAEmitterCell的基本属性
     + (instancetype)emitterCell;// UIKit根据这个发射粒子和定义的基础上创建一个随机粒子。此原型包括一些属性来控制粒子的图片,颜色,方向,运动,缩放比例和生命周期。
    
     @property(nullable) CGColorRef color; //粒子的颜色
    
     @property float alphaRange;// 一个粒子的颜色alpha能改变的范围
    
     @property float alphaSpeed; //粒子透明度在生命周期内的改变速度
    
     @property float redRange; 
     @property float greenRange; 
     @property float blueRange; ///一个粒子的颜色blue,green,red能改变的范围
    
     @property float redSpeed; 
     @property float greenSpeed; 
     @property float blueSpeed; ///一个粒子blue,green,red在生命周期内改变的速度
    
     @property(nullable, strong) id contents; //粒子要展现的图片,CGImageRef类型,否则不显示
    
     @property CGRect contentsRect; //渲染的范围
    
     @property CGFloat emissionLatitude; //发射Z轴方向的发射角度
    
     @property CGFloat emissionLongitude; //粒子在xy平面的发射角度
    
     @property CGFloat emissionRange; //粒子发射角度的容差
    
     @property(nullable, copy) NSArray<CAEmitterCell> *emitterCells; //粒子发射的粒子
    
     @property(getter=isEnabled) BOOL enabled; //粒子是否允许发射器渲染
    
     @property float lifetime;// 粒子生存时间
    
     @property float lifetimeRange; //粒子生存时间范围,设置之后 lifetime +/-= lifetimeRange
    
     @property(copy) NSString *minificationFilter; 
     @property(copy) NSString *magnificationFilter;// 减小,增加自己的大小
    
     @property float minificationFilterBias;// 减少大小的因子
    
     @property(nullable, copy) NSString *name; //粒子的名字
    
     @property CGFloat scale; //粒子缩放大小
    
     @property CGFloat scaleRange; //粒子缩放范围
    
     @property CGFloat scaleSpeed; //粒子缩放速度
    
     @property CGFloat spin; //旋转角度
    
     @property CGFloat spinRange; //旋转角度范围
    
     @property CGFloat velocity; //粒子的速度
    
     @property CGFloat velocityRange;// 粒子速度范围
    
     @property CGFloat xAcceleration;
     @property CGFloat yAcceleration;
     @property CGFloat zAcceleration; //粒子在x,y,x方向的加速度
    

    发射层CAEmitterLayer属性

      + (instancetype)layer;
      // 由很多emitterCell组成的发射层,控制粒子的形状,发射位置,提供了一个粒子发射器系统为核心的动画
    
      @property(nullable, copy) NSArray<CAEmitterCell> *emitterCells; 
      //装着   CAEmitterCell对象的粒子单元数组,被用于把粒子投放到layer上
    
      @property CGPoint emitterPosition; //发射器在xy平面的中心位置
    
      @property CGFloat emitterZPosition;// 发射器的Z平面位置
    
      @property CGSize emitterSize; //发射器的尺寸大小
    
      @property CGFloat emitterDepth; //发射器的深度,在某些模式下会产生立体效果
    
      @property(copy) NSString *emitterMode; //发射模式
    
      kCAEmitterLayerPoints //从发射器中发出 
      kCAEmitterLayerOutline //从发射器边缘发出
      kCAEmitterLayerSurface //从发射器表面发出 
      kCAEmitterLayerVolume //从发射器中点发出
    
      @property(copy) NSString *emitterShape; //发射器的形状
    
      kCAEmitterLayerPoint //点的形状,粒子从一个点出发 
      kCAEmitterLayerLine //线的形状,粒子从一条线出发 
      kCAEmitterLayerRectangle //矩形形状,粒子从一个矩形出发 
      kCAEmitterLayerCuboid //立方体形状,会影响Z平面的效果 
      kCAEmitterLayerCircle //圆形,粒子会在圆形范围发射 kCAEmitterLayerSphere 球形
     
      @property(copy) NSString *renderMode;// 渲染模式
    
      kCAEmitterLayerUnordered //这种模式下,粒子是无序出现的,多个发射源将混合        
      kCAEmitterLayerOldestFirst //这种模式下,生命久的粒子会被渲染在最上层       
      kCAEmitterLayerOldestLast// 这种模式下,年轻的粒子会被渲染在最上层   
      kCAEmitterLayerBackToFront //这种模式下,粒子的渲染按照Z轴的前后顺序进行          
      kCAEmitterLayerAdditive //这种模式会进行粒子混合
      @property BOOL preservesDepth; //是否开启三维空间效果
    
      @property float birthRate; //粒子产生速度 默认为1.0
    
      @property float lifetime; //粒子存活时间,默认为1s
    
      @property float scale; //粒子的缩放大小
    
      @property unsigned int seed; //用于初始化随机数产生的粒子
    
      @property float spin; //粒子的旋转位置
    
      @property float velocity;// 粒子的运动速度
    

    写几行代码用起来

     CAEmitterLayer *fireEmitter = [CAEmitterLayer layer];
     fireEmitter.emitterPosition = CGPointMake(self.view.frame.size.width/2.0,    
     self.view.frame.size.height - 60);
     fireEmitter.emitterSize = CGSizeMake( 50, 0);
     fireEmitter.emitterShape = kCAEmitterLayerLine;
     fireEmitter.renderMode  = kCAEmitterLayerAdditive;
     //火焰
     CAEmitterCell* fire = [CAEmitterCell emitterCell];
     [fire setName:@"fire"];
    
     fire.birthRate   = 500;
     fire.emissionLongitude  = M_PI;
     fire.velocity   = -80;
     fire.velocityRange  = 30;
     fire.emissionRange  = 1.1;
     fire.yAcceleration  = -200;
     fire.scaleSpeed   = 0.3;
     fire.lifetime   = 1;
     fire.lifetimeRange  = 0.35;
    
     fire.color = [[UIColor colorWithRed:0.8 green:0.4 blue:0.2 alpha:0.1] CGColor];
     fire.contents = (id) [[UIImage imageNamed:@"DazFire"] CGImage];
    
     //烟雾
     CAEmitterCell* smoke = [CAEmitterCell emitterCell];
     [smoke setName:@"smoke"];
    
     smoke.birthRate   = 11;
     smoke.lifetime   = 4;
     smoke.velocity   = -40;
     smoke.velocityRange  = 20;
     smoke.emissionRange  = M_PI / 4;
     smoke.spinRange   = 6;
     smoke.yAcceleration  = -160;
     smoke.scale    = 0.1;
     smoke.alphaSpeed  = -0.12;
     smoke.scaleSpeed  = 0.7;
    
     smoke.contents   = (id) [[UIImage imageNamed:@"DazSmoke"] CGImage];
     smoke.color = [[UIColor colorWithWhite:0.5 alpha:0.3]CGColor];
    
     fireEmitter.emitterCells = @[smoke,fire];
     [self.view.layer addSublayer:fireEmitter];
    

    产生火焰效果,抄录一下,哪天要用的时候就不用到处找了,谢谢大神的分享!

    相关文章

      网友评论

          本文标题:iOS-粒子系统

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