一、在 UIKit 中,粒子系统由两部分组成:
- 1: 一个或多个 CAEmitterCells :发射器电池可以看作是单个粒子的原型(例如,一个单一的粉扑在一团烟雾)。当散发出一个粒子,UIKit根据这个发射粒子和定义的基础上创建一个随机粒子。此原型包括一些属性来控制粒子的图片,颜色,方向,运动,缩放比例和生命周期。
- 2: 一个或多个 CAEmitterLayers, 但通常只有一个:这个发射的层主要控制粒子的形状(例如,一个点,矩形或圆形)和发射的位置(例如,在矩形内,或边缘)。这个层具有全局的乘法器,可以施加到系统内的CAEmitterCells。这些给你一个简单的方法覆盖的所有粒子的变化。比如一个人为的例子将改变x雨来模拟风的速度。
实现步骤
- 1: 创建发射器
- 2: 创建粒子cell
- 3: 讲cell添加到发射器
- 4: 讲发射器添加到view.layer上就可以了
具体什么样子的动画自己设置属性就可以了
// 1: 创建一个粒子发射器
let sender = CAEmitterLayer()
// 1.0 设置位置
sender.emitterPosition = CGPoint(x: UIScreen.main.bounds.size.width/2, y: -200)
// 1.1 开启三维动画
sender.preservesDepth = true
// 1.2 1s发射的cell的个数
sender.birthRate = 2
// 1.3 发射器发送例子cell的速度。 粒子发射器和粒子cell设置一个就可以了
// sender.velocity = 10
// 1.4 发射器设置cell粒子的缩放比例
// sender.scale = 1
// 1.5 设置旋转
// sender.spin = 2
// 2: 创建粒子元素
let cell = CAEmitterCell()
// 2.0 cell个数
cell.birthRate = 20
// 2.1: 设置cell的生成周期
cell.lifetime = 4
cell.lifetimeRange = 2.5
// 2.2 设置发射的方向
cell.emissionLongitude = CGFloat(Double.pi/2)
// 2.3 设置发射的范围
cell.emissionRange = CGFloat(Double.pi/4)
// 2.4 设置cell的运动速度
cell.velocity = 200
cell.velocityRange = 150
// 2.5 设置放大的比例
cell.scaleRange = 0.7
cell.scaleSpeed = 0.5
// 2.6 设置粒子的旋转
cell.spin = CGFloat(Double.pi/4)
cell.spinRange = CGFloat(Double.pi/8)
// 2.7 包含图片
cell.contents = UIImage(named: "good3_30x30_")?.cgImage
// 3: 粒子发射器包含粒子元素
sender.emitterCells = [cell]
// 4: 讲粒子发射器添加到当前的视图
view.layer.addSublayer(sender)
CAEmitterLayer和CAEmitterCell的属性
#######2.1: CAEmitterLayer的属性
emitterCells: 装着 CAEmitterCell 对象的数组, 被用于把粒子投放到 layer 上;
birthRate: 粒子产生系数,默认1.0 ;
lifetime: 发射器的生命周期
emitterPosition: 发射位置
emitterZposition: 发射源的z坐标位置;
emitterSize: 发射源的尺寸大;
emitterDepth: 决定粒子形状的深度联系, 三围视图
emitterShape: 发射源的形状:
emitterMode: 发射模式
renderMode: 渲染模式
preservesDepth: 不是多很清楚(粒子是平展在层上)
velocity :粒子速度
scale: 粒子的缩放比例
spin: 自旋转速度
seed :用于初始化随机数产生的种子
#######2.2: CAEmitterCell的属性
name :粒子的名字
isEnabled: 控制是否呈现来自此发射器的单元格
birthrate :粒子参数的速度乘数因子;
lifetime: 粒子生命周期
lifetimeRange :生命周期范围
emissionLatitude : 发射的纬度方向的角度
emissionLongitude : 发射的经度方向的角度
emissionRange ;周围发射角度
velocity :速度
velocityRange :速度范围
xAcceleration: 粒子 x 方向的加速度分量
yAcceleration: 粒子 y 方向的加速度分量
zAcceleration: 粒子 z 方向的加速度分量
scale :缩放比例:
scaleRange :缩放比例范围;
scaleSpeed :缩放比例速度:
spin :子旋转角度
spinrange :子旋转角度范围
color: 粒子的颜色
redRange : 一个粒子的颜色red能改变的范围
greenrange: 一个粒子的颜色green能改变的范围
blueRange : 一个粒子的颜色blue能改变的范围
alphaRange: 一个粒子的颜色alpha能改变的范围
redSpeed; 粒子 red 在生命周期内的改变速度
greenSpeed: 粒子 green 在生命周期内的改变速度
blueSpeed: 粒子 blue 在生命周期内的改变速度
alphaSpeed: 粒子透明度在生命周期内的改变速度
contents :是个 CGImageRef 的对象, 既粒子要展现的图片
contentsRect :应该画在 contents 里的子rectangle
contentsScale: 定义应用于单元格内容的比例因子
minificatonFilter :减小自己的大小
magnificationFilter :不是很清楚好像增加自己的大小
minificationFilterBias :减小大小的因子
emitterCells :粒子发射的粒子
style :不是很清楚
2.3 枚举
NSString * const kCAEmitterLayerPoints;
NSString * const kCAEmitterLayerOutline;
NSString * const kCAEmitterLayerSurface;
NSString * const kCAEmitterLayerVolume;
NSString * const kCAEmitterLayerPoint;
NSString * const kCAEmitterLayerLine;
NSString * const kCAEmitterLayerRectangle;
NSString * const kCAEmitterLayerCuboid;
NSString * const kCAEmitterLayerCircle;
NSString * const kCAEmitterLayerSphere;
NSString * const kCAEmitterLayerUnordered;
NSString * const kCAEmitterLayerOldestFirst;
NSString * const kCAEmitterLayerOldestLast;
NSString * const kCAEmitterLayerBackToFront;
NSString * const kCAEmitterLayerAdditive;
网友评论