本期内容:
- CAEmitterLayer 粒子发射器(层)
- CAEmitterCell 粒子
- 下雨效果
- 下雪效果
- 烟火效果
- 需要注意的属性叠加
- 总结以及demo下载
CAEmitterLayer 粒子发射器(层)
简介:CAEmitterLayer是发射、动画和渲染粒子系统的层。 是CALayer的一个常用子类,CALayer的子类有很多,如果能很好的使用它们会得到一些意想不到的效果。CAEmitterLayer就是其中之一,CAEmitterLayer是用于实现基于Core Animation的粒子发生器系统。由CAEmitterCell实例定义的粒子被绘制在层的背景颜色和边框之上。
具体属性清单:
// 常用属性:
NSArray<CAEmitterCell *> *emitterCells; // 用来装粒子的数组
CGPoint emitterPosition; // 决定了粒子发射形状的中心点
CGFloat emitterZPosition;
CGSize emitterSize; // 发射源的尺寸大小
NSString *emitterShape; // 发射源的形状
NSString *emitterMode; // 发射模式
NSString *renderMode; // 渲染模式
// 不常用属性:
float birthRate; // 粒子产生系数,默认1.0 (可以在Cell里面赋值)
float lifetime; // 粒子的生命周期系数, 默认1.0 (可以在Cell里面赋值)
BOOL preservesDepth; // 定义该层是否将其子层压平到其平面。
CGFloat emitterDepth; // 确定发射器形状的深度
float velocity; // 粒子速度系数, 默认1.0 (可以在Cell里面赋值)
float scale; // 粒子的缩放比例系数, 默认1.0 (可以在Cell里面赋值)
float spin; // 粒子的自旋转速度系数, 默认1.0 (可以在Cell里面赋值)
unsigned int seed; // 随机数发生器
CAEmitterLayer的使用方式如下:
// 1.创建CAEmitterLayer
emitterLayer = [CAEmitterLayer layer];
// 2.设置CAEmitterLayer的属性(最主要的是前四个)
// 发射源的形状 是枚举类型
emitterLayer.emitterShape = kCAEmitterLayerLine;
// kCAEmitterLayerCircle
// 粒子从一个以(发射位置)为中心的圆中发射出来。
// kCAEmitterLayerCuboid
// 粒子从一个相反角的长方体(3D矩形)发射。
// kCAEmitterLayerLine
// 粒子从(发射位置)沿直线发射。
// kCAEmitterLayerPoint
// 粒子从一个点(发射位置)发射出来。
// kCAEmitterLayerRectangle
// 粒子从一个有相对角的矩形发射。
// kCAEmitterLayerSphere
// 粒子从一个以(发射位置)为中心的球体中发射出来。
// 发射模式 枚举类型
emitterLayer.emitterMode = kCAEmitterLayerSurface;
// kCAEmitterLayerOutline
// 粒子从粒子发射器的轮廓发射出来。
// kCAEmitterLayerPoints
// 粒子从粒子发射器上的点发射出来。
// kCAEmitterLayerSurface
// 粒子从粒子发射器的表面发射出来。
// kCAEmitterLayerVolume
// 粒子从粒子发射器中的a位置发射。
// 发射源的size 决定了发射源的大小,如果做了倾斜或者便宜屏幕宽度是不够的,那时候就需要自定义
emitterLayer.emitterSize = self.view.frame.size;
// 发射源的位置
emitterLayer.emitterPosition = CGPointMake(self.view.bounds.size.width * 0.5, -10);
// 渲染模式 枚举类型 (⭐️这个渲染模式表达效果会很不好,不常用,kCAEmitterLayerAdditive,可以让重叠的部分高亮)
emitterLayer.renderMode = kCAEmitterLayerAdditive;
// kCAEmitterLayerOldestFirst;
// kCAEmitterLayerOldestLast;
// kCAEmitterLayerBackToFront;
// kCAEmitterLayerAdditive;
// 3.添加到目标视图的layer上
[self.view.layer addSublayer:emitterLayer];
CAEmitterCell 粒子
简介:CAEmitterCell类表示CAEmitterLayer对象发出的一个粒子源。 CAEmitterCell定义发射粒子的方向和性质。CAEmitterLayer发射器可以有一系列子粒子,这些子粒子可以让粒子自己发射粒子,也就是CAEmitterCell也可以发射CAEmitterCell
/**
具体属性清单:
// 常用属性清单(以空行来划分使用点):
NSString *name; // 粒子名字, 默认为nil
float birthRate; // 粒子的产生率,默认0
float lifetime; // 粒子的生命周期,以秒为单位。默认0
float lifetimeRange; // 粒子的生命周期的范围,以秒为单位。默认0
CGFloat emissionLatitude;// 指定纬度,纬度角代表了在x-z轴平面坐标系中与x轴之间的夹角,默认0:
CGFloat emissionLongitude; // 指定经度,经度角代表了在x-y轴平面坐标系中与x轴之间的夹角,默认0:
CGFloat emissionRange; //发射角度范围,默认0,以锥形分布开的发射角度。角度用弧度制。粒子均匀分布在这个锥形范围内;
CGFloat velocity; // 速度和速度范围,两者默认0
CGFloat velocityRange;
CGFloat xAcceleration; // x,y,z方向上的加速度分量,三者默认都是0
CGFloat yAcceleration;
CGFloat zAcceleration;
CGFloat scale; // 缩放比例, 默认是1
CGFloat scaleRange; // 缩放比例范围,默认是0
CGFloat scaleSpeed; // 在生命周期内的缩放速度,默认是0
CGFloat spin; // 粒子的平均旋转速度,默认是0
CGFloat spinRange; // 自旋转角度范围,弧度制,默认是0
CGColorRef color; // 粒子的颜色,默认白色
float redRange; // 粒子颜色red,green,blue,alpha能改变的范围,默认0
float greenRange;
float blueRange;
float alphaRange;
float redSpeed; // 粒子颜色red,green,blue,alpha在生命周期内的改变速度,默认都是0
float greenSpeed;
float blueSpeed;
float alphaSpeed;
id contents; // 粒子的内容,为CGImageRef的对象
NSArray<CAEmitterCell *> *emitterCells; // 粒子里面的粒子
// 非常不常用属性:
BOOL enabled;
NSDictionary *style;
CGRect content