zoukankan      html  css  js  c++  java
  • swift 实现漂亮的粒子效果CAEmitterLayer


    一些粒子效果

    我们经常会在一些游戏或者应用中看到一些炫酷的粒子效果,我们在iOS中也能很轻松的搞一些粒子效果

    我们本次做得是一个下雪的效果,看下效果图

    源码地址:  https://github.com/smalldu/IOS-Animations
    中的AnimationDemo10

    下雪效果

    这个 gif 录的有点卡 , 但是运行效果一点都不卡 很唯美。

    iOS中的粒子效果是用CAEmitterLayer和CAEmitterCell 实现的 , 对cell的粒子数 ,存活时间。。。各种东西进行配置就可以了

    常用的产生粒子模式 三种kCAEmitterLayerPoint 点 kCAEmitterLayerLine线 kCAEmitterLayerRectangle 矩形,大家可以自己试试 。我就不一一展示了。

    下面是所有代码 ,代码量很少 。而且都有注释

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            let rect = CGRect(x: 0.0, y: -70.0,  view.bounds.width,
                height: 50.0)
            let emitter = CAEmitterLayer()
            emitter.frame = rect
            view.layer.addSublayer(emitter)
            emitter.emitterShape = kCAEmitterLayerRectangle
    
            //kCAEmitterLayerPoint
            //kCAEmitterLayerLine
            //kCAEmitterLayerRectangle
    
            emitter.emitterPosition = CGPointMake(rect.width/2, rect.height/2)
            emitter.emitterSize = rect.size
    
            let emitterCell = CAEmitterCell()
            emitterCell.contents = UIImage(named: "xh")!.scaleImageToWidth(30).CGImage
            emitterCell.birthRate = 120  //每秒产生120个粒子
            emitterCell.lifetime = 3    //存活1秒
            emitterCell.lifetimeRange = 3.0
    
            emitter.emitterCells = [emitterCell]  //这里可以设置多种粒子 我们以一种为粒子
            emitterCell.yAcceleration = 70.0  //给Y方向一个加速度
            emitterCell.xAcceleration = 20.0 //x方向一个加速度
            emitterCell.velocity = 20.0 //初始速度
            emitterCell.emissionLongitude = CGFloat(-M_PI) //向左
            emitterCell.velocityRange = 200.0   //随机速度 -200+20 --- 200+20
            emitterCell.emissionRange = CGFloat(M_PI_2) //随机方向 -pi/2 --- pi/2
           //emitterCell.color = UIColor(red: 0.9, green: 1.0, blue: 1.0,
             //   alpha: 1.0).CGColor //指定颜色
            emitterCell.redRange = 0.3
            emitterCell.greenRange = 0.3
            emitterCell.blueRange = 0.3  //三个随机颜色
    
            emitterCell.scale = 0.8
            emitterCell.scaleRange = 0.8  //0 - 1.6 
            emitterCell.scaleSpeed = -0.15  //逐渐变小
    
            emitterCell.alphaRange = 0.75   //随机透明度
            emitterCell.alphaSpeed = -0.15  //逐渐消失
    
    
            // Do any additional setup after loading the view, typically from a nib.
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
    }

    OK!搞定!



    文/大石头布(简书作者)
    原文链接:http://www.jianshu.com/p/7c5cd03b050c
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  • 相关阅读:
    可爱的中国电信 请问我们的电脑还属于我们自己吗?
    了解客户的需求,写出的代码或许才是最优秀的............
    DELPHI DATASNAP 入门操作(3)简单的主从表的简单更新【含简单事务处理】
    用数组公式获取字符在字符串中最后出现的位置
    在ehlib的DBGridEh控件中使用过滤功能(可以不用 MemTableEh 控件 适用ehlib 5.2 ehlib 5.3)
    格式化json返回的时间
    ExtJs中使用Ajax赋值给全局变量异常解决方案
    java compiler level does not match the version of the installed java project facet (转)
    收集的资料(六)ASP.NET编程中的十大技巧
    收集的资料共享出来(五)Asp.Net 权限解决办法
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/5362213.html
Copyright © 2011-2022 走看看