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