CALayer子类五、CAEmitterLayer
2018-02-09 本文已影响17人
Carson_Zhu
简介
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; }