美文网首页
粒子动画

粒子动画

作者: iYeso | 来源:发表于2017-04-25 18:06 被阅读53次
    一、在 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;
    

    相关文章

      网友评论

          本文标题:粒子动画

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