CAEmitterLayer(粒子发生器)
一、基本简介
- CAEmitterLayer是CALayer的一个子类,和CAEmitterCell一起使用可以创造出多样的动画效果。
- CAEmitterLayer主要用于实现基于Core Animation的粒子发生器系统。
- 在粒子系统中,CAEmitterLayer负责发射粒子(当然粒子也可以发射粒子),而这些所谓的粒子,就是CAEmitterCell,我们可以将CAEmitterLayer比作是CAEmitterCell的容器,它会按照你的设置来以不同的样式不断产生粒子,也就是CAEmitterCell。
- CAEmitterLayer决定了粒子从什么样的几何特性上发射出来,这个几何特性包括了位置,形状,大小。另外还有一些渲染相关的特性。另外的一些属性是CAEmitterLayer和CAEmiiterCell都有的,CAEmitterLayer的这些属性会作为CAEmitterCell相同属性的系数。
- CAEmitterCell则决定了粒子自身的一些特征,例如速度,加速度,发射的范围,颜色等等。这些属性大多是以“中间值”配合一个范围值的方式来表示的。
二、CAEmitterLayer的属性
CAEmitterLayer类提供了一个粒子发射器系统为核心的动画。这些粒子是由CAEmitterCell组成的实例,它相当于一个管理者,来管理 CAEmitterCell的发射的一些细节,比如发射的位置,发射形状等。
属性 | 作用 |
---|---|
emitterPosition | 发射位置 |
emitterSize | 发射源的大小 |
emitterMode | 发射模式 |
emitterShape | 发射源的形状 |
renderMode | 渲染模式 |
birthRate | 粒子产生系数,默认1.0 |
emitterCells | 装着CAEmitterCell对象的数组,被用于把粒子投放到layer上 |
emitterDepth | 决定粒子形状的深度联系 |
emitterZposition | 发射源的z坐标位置 |
lifetime | 粒子生命周期 |
scale | 粒子的缩放比例 |
seed | 用于初始化随机数产生的种子 |
spin | 自旋转速度 |
velocity | 粒子速度 |
三、CAEmitterCell 的属性
CAEmitterCell是粒子发射系统里的粒子,用CAEmitterCell来定义你所需要的粒子的样式,图片,颜色,方向,运动,缩放比例和生命周期等。
属性 | 作用 |
---|---|
alphaRange | 一个粒子的颜色alpha能改变的范围 |
alphaSpeed | 粒子透明度在生命周期内的改变速度 |
birthrate | 每秒发射的粒子数量 |
blueRange | 一个粒子的颜色blue 能改变的范围 |
blueSpeed | 粒子blue在生命周期内的改变速度 |
color | 粒子的颜色 |
contents | 是个CGImageRef的对象,既粒子要展现的图片 |
contentsRect | 应该画在contents里的子rectangle |
emissionLatitude | 发射的z轴方向的角度 |
emissionLongitude | x-y平面的发射方向 |
emissionRange | 周围发射角度 |
emitterCells | 粒子发射的粒子的数组 |
enabled | 粒子是否被渲染 |
greenrange | 一个粒子的颜色green 能改变的范围 |
greenSpeed | 粒子green在生命周期内的改变速度 |
lifetime | 生命周期 |
lifetimeRange | 生命周期范围 lifetime= lifetime(+/-) lifetimeRange |
magnificationFilter | 增加自己的大小 |
minificatonFilter | 减小自己的大小 |
minificationFilterBias | 减小大小的因子 |
name | 粒子的名字 |
redRange | 一个粒子的颜色red 能改变的范围 |
redSpeed | 粒子red在生命周期内的改变速度 |
scale | 缩放比例 |
scaleRange | 缩放比例范围 |
scaleSpeed | 缩放比例速度 |
spin | 子旋转角度 |
spinrange | 子旋转角度范围 |
velocity | 速度 |
velocityRange | 速度范围 |
xAcceleration | 粒子x方向的加速度分量 |
yAcceleration | 粒子y方向的加速度分量 |
zAcceleration | 粒子z方向的加速度分量 |
“红包雨”的实现
// 设置CAEmitterLayer
self.rainLayer = [CAEmitterLayer layer];
// 降落区域的方位
self.rainLayer.frame = self.view.bounds;
// 在背景图上添加粒子图层
[self.view.layer addSublayer:self.rainLayer];
// 发射形状:线性
self.rainLayer.emitterShape = kCAEmitterLayerLine;
self.rainLayer.emitterMode = kCAEmitterLayerSurface;
// 指定发射源的大小
self.rainLayer.emitterSize = self.view.frame.size;
// 指定发射源的位置
self.rainLayer.emitterPosition = CGPointMake(self.view.bounds.size.width * 0.5, -10);
// 配置cell
CAEmitterCell * snowCell = [CAEmitterCell emitterCell];
snowCell.contents = (id)[[UIImage imageNamed:@"hongbao.png"] CGImage];
// 每秒多少个
snowCell.birthRate = 1.0;
// 存活时间
snowCell.lifetime = 30;
// 运动速度
snowCell.speed = 2;
// 初速度,因为动画属于落体效果,只需要设置它在y方向上的加速度
snowCell.velocity = 10.f;
// 初速度范围
snowCell.velocityRange = 10.f;
// y轴方向的加速度
snowCell.yAcceleration = 60;
// 图片缩放比例
snowCell.scale = 0.05;
snowCell.scaleRange = 0.f;
// 开始动画:添加到图层上
self.rainLayer.emitterCells = @[snowCell];
- 效果展示