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

2016-09-28  本文已影响92人  384b68c260d2

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;//透明度变化范围

上一篇下一篇

猜你喜欢

热点阅读