iOS CAEmitterLayer

作者: asaBoat | 来源:发表于2017-05-05 13:50 被阅读39次

    相关资源

    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;
    
    

    简单示例

    emitter0.png
    emitter1.png
    emitter2.png

    相关文章

      网友评论

        本文标题:iOS CAEmitterLayer

        本文链接:https://www.haomeiwen.com/subject/yiujtxtx.html