一个或多个CAEmitterCells:发射器电池可以看作是单个粒子的原型(例如,一个单一的粉扑在一团烟雾)。当散发出一个粒子UIKit根据这个发射粒子和定义的基础上创建一个随机粒子。此原型包括一些属性来控制粒子的图片,颜色,方向,运动,缩放比例和生命周期。
CAEmitterLayer通过添加 emitterLayer.emitterCells = array 添加cell
1).birthRate 顾名思义没有这个也就没有effectCell,这个必须要设置,具体含义是每秒某个点产生的effectCell数量
2).lifetime & lifetimeRange 表示effectCell的生命周期,既在屏幕上的显示时间要多长。
3).contents 这个和CALayer一样,只是用来设置图片
4).name 这个是当effectCell存在caeEmitter 的emitterCells中用来辨认的。用到setValue forKeyPath比较有用
5).velocity & velocityRange & emissionRange 表示cell向屏幕右边飞行的速度 & 在右边什么范围内飞行& +-角度扩散
6).把cell做成array放进caeEmitter.emitterCells里去。caeEmitter.renderMode有个效果很不错,能变成火的就是kCAEmitterLayerAdditive
属性:
alphaRange: 一个粒子的颜色alpha能改变的范围;
alphaSpeed:粒子透明度在生命周期内的改变速度;
birthrate:粒子参数的速度乘数因子,默认1.0;
blueRange:一个粒子的颜色blue 能改变的范围;
blueSpeed: 粒子blue在生命周期内的改变速度;
color:粒子的颜色
contents:是个CGImageRef的对象,既粒子要展现的图片;
contentsRect:应该画在contents里的子rectangle:
emissionLatitude:发射的z轴方向的角度
emissionLongitude:x-y平面的发射方向
emissionRange;周围发射角度
emitterCells:粒子发射的粒子
enabled:粒子是否被渲染
greenrange: 一个粒子的颜色green 能改变的范围;
greenSpeed: 粒子green在生命周期内的改变速度;
lifetime:生命周期
lifetimeRange:生命周期范围
magnificationFilter:不是很清楚好像增加自己的大小
minificatonFilter:减小自己的大小
minificationFilterBias:减小大小的因子
name:粒子的名字
redRange:一个粒子的颜色red 能改变的范围;
redSpeed; 粒子red在生命周期内的改变速度;
scale:缩放比例:
scaleRange:缩放比例范围;
scaleSpeed:缩放比例速度:
spin:子旋转角度
spinrange:子旋转角度范围
velocity:速度
velocityRange:速度范围
xAcceleration:粒子x方向的加速度分量
yAcceleration:粒子y方向的加速度分量
zAcceleration:粒子z方向的加速度分量
Layer :
emitterShape:发射源的形状:
emitterPosition:发射位置
emitterPosition:发射位置
emitterCells: 装着CAEmitterCell对象的数组,被用于把粒子投放到layer上;
emitterSize:发射源的尺寸大小;
renderMode:渲染模式:
//创建并使用 CAEmitterLayer
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor yellowColor];
[self.view.layer insertSublayer:self.emitterLayer above:0];
[self.emitterLayer setHidden:false];
}
-(CAEmitterLayer *)emitterLayer{
if (!_emitterLayer) {
CAEmitterLayer *emitterLayer = [CAEmitterLayer layer];
emitterLayer.emitterPosition = CGPointMake(ALinScreenWidth-100, ALinScreenHeight-100);
//尺寸大小
emitterLayer.emitterSize = CGSizeMake(20, 20);
//渲染模式x
emitterLayer.renderMode = kCAEmitterLayerUnordered;
NSMutableArray *array = [NSMutableArray array];
for (int i=0; i<10; i++) {
// 发射单元
CAEmitterCell *stepCell = [CAEmitterCell emitterCell];
// 创建速度
stepCell.birthRate = 1;
// 粒子存活时间 随机数函数arc4random_uniform(x),可以用来产生0~(x-1)范围内的随机数,不需要再进行取模运算。如果要生成1~x的随机数,可以这么写:arc4random_uniform(x)+1
stepCell.lifetime = arc4random_uniform(4)+1;
// 粒子的生存时间容差
stepCell.lifetimeRange = 1.5;
// 颜色 图片名称
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"good%d_30x30", i]];
stepCell.contents = (__bridge id _Nullable)([image CGImage]);
stepCell.velocity = arc4random_uniform(100)+100;
// 粒子速度的容差
stepCell.velocityRange = 80;
// 粒子在xy平面的发射角度
stepCell.emissionLongitude = M_PI+M_PI_2;
// 粒子发射角度的容差
stepCell.emissionRange = M_PI_2/6;
// 缩放比例
stepCell.scale = 0.3;
[array addObject:stepCell];
}
emitterLayer.emitterCells = array;
_emitterLayer = emitterLayer;
}
return _emitterLayer;
}