相关资源
GitHub粒子发射和复制图层示例
GitHub粘性控件示例
GitHub弹性动画
CALayer分析
响应者手势分析
简介
继承自CALayer,隶属于QuartzCore,这是一个发射粒子(particle)、给粒子动画、渲染(绘画)粒子的图层。
粒子(particle,CAEmitterCell的实例)被绘制在图层的背景颜色和边框之上。
属性
/* 粒子单元数组,每一个单元 CAEmitterCell 类型 */
@property(nullable, copy) NSArray<CAEmitterCell *> *emitterCells;
/* 每秒钟粒子单元创建粒子(particle)的个数 */
@property float birthRate;
/* 粒子(particle)存在时间 */
@property float lifetime;
/* 发射器在xy平面的中心位置,默认(0,0)*/
@property CGPoint emitterPosition;
/* 发射器在Z平面的位置,默认是0 */
@property CGFloat emitterZPosition;
/*发射器的尺寸大小和景深深度,根据emitterShape的情况,有些效果可能无效*/
@property CGSize emitterSize;
@property CGFloat emitterDepth;
/* 定义发射形状,字符串类型,决定粒子的出口形态,系统会在emitterSize上进行修饰处理。可选项如下:
kCAEmitterLayerPoint 点的形状 ,粒子从一个点发出
kCAEmitterLayerLine 线的形状,粒子从一条线发出
kCAEmitterLayerRectangle 矩形形状,粒子从一个矩形中发出
kCAEmitterLayerCuboid 立方体形状,会影响Z平面的效果
kCAEmitterLayerCircle 圆形,粒子会在圆形范围发射
kCAEmitterLayerSphere 球型
*/
@property(copy) NSString *emitterShape;
/*定义发射模式(相对于emitterShape,只会展示不同的效果),字符串类型。
kCAEmitterLayerPoints 从发射器两端点
kCAEmitterLayerOutline 从发射器边缘发出
kCAEmitterLayerSurface 从发射器表面发出
kCAEmitterLayerVolume 从发射器中发出
*/
@property(copy) NSString *emitterMode;
/* 定义渲染模式,字符串类型。
kCAEmitterLayerUnordered 粒子是无序出现的
kCAEmitterLayerOldestFirst 声明久的粒子会被渲染在最上层
kCAEmitterLayerOldestLast 年轻的粒子会被渲染在最上层
kCAEmitterLayerBackToFront 粒子的渲染按照Z轴的前后顺序进行
kCAEmitterLayerAdditive 进行粒子混合
*/
@property(copy) NSString *renderMode;
/* 是否开启三维空间效果 ,默认是NO*/
@property BOOL preservesDepth;
/* 增加粒子的速度,默认是1. */
@property float velocity;
/* 粒子的缩放大小,默认是1 */
@property float scale;
/* 粒子的旋转位置 */
@property float spin;
CAEmitterCell介绍
一些属性可以参考CAEmitterLayer(优先级高于CAEmitterCell)
/* 单元名称,用于构造keyPath,默认为空 */
@property(nullable, copy) NSString *name;
/* 控制此单元是否被emmiter渲染 */
@property(getter=isEnabled) BOOL enabled;
/* 粒子的创建速率 ,默认为0*/
@property float birthRate;
/* 粒子的生存时间,单位是秒,lifetime是个平均值(mean),默认值0;lifetimeRange描述的是粒子的生存时间容差 ,默认值0*/
@property float lifetime;
@property float lifetimeRange;
/*粒子在Z轴方向的发射角度(弧度制)和 粒子在xy平面的发射角度(弧度制)*/
@property CGFloat emissionLatitude;
@property CGFloat emissionLongitude;
/*粒子发射角度的容差(弧度制)*/
@property CGFloat emissionRange;
/* 粒子发射的速度和速度容差,默认都是0 */
@property CGFloat velocity;
@property CGFloat velocityRange;
/* 三个方向的加速度矢量 Defaults to
* (0, 0, 0) */
@property CGFloat xAcceleration;
@property CGFloat yAcceleration;
@property CGFloat zAcceleration;
/* 粒子的缩放因子(系数,平均值),默认1;缩放因子容差,默认是0;缩放速度 */
@property CGFloat scale;
@property CGFloat scaleRange;
@property CGFloat scaleSpeed;
/* 粒子旋转速度,和旋转速度容差 */
@property CGFloat spin;
@property CGFloat spinRange;
/* 粒子颜色,默认值是 纯白;每个通道的色值容差,默认是(0, 0, 0, 0) */
@property(nullable) CGColorRef color;
@property float redRange;
@property float greenRange;
@property float blueRange;
@property float alphaRange;
/* 粒子每个颜色的变化速度(在lifetime期间),默认值 (0, 0, 0, 0) */
@property float redSpeed;
@property float greenSpeed;
@property float blueSpeed;
@property float alphaSpeed;
/* 粒子的内容 */
@property(nullable, strong) id contents;
/* 使用(渲染)内容的范围 默认值是矩阵 [0 0 1 1] */
@property CGRect contentsRect;
/* 内容缩放因子 */
@property CGFloat contentsScale;