淺談swift動畫(六)

粒子動畫

    func test() {
        self.view.backgroundColor = UIColor.black
        let icon = UIImageView()
        icon.image = UIImage(named: "qqicon")
        icon.sizeToFit()
        icon.frame.origin = CGPoint(x: 100, y: 100)
        icon.isUserInteractionEnabled = true
        let tap = UITapGestureRecognizer(target: self, action: #selector(iconTap))
        icon.addGestureRecognizer(tap)
        view.addSubview(icon)
        //發(fā)射位置
        emitterLayer.emitterPosition = icon.center
        //發(fā)射源的大小
        emitterLayer.emitterSize = CGSize(width: 40, height: 40)
        //發(fā)射源的形狀
        emitterLayer.emitterShape =  kCAEmitterLayerCircle
        //發(fā)射模式
        emitterLayer.emitterMode = kCAEmitterLayerOutline
        view.layer.addSublayer(emitterLayer)
        
        let emitterCell = CAEmitterCell()
        emitterCell.name = "emitterButton"
        //設(shè)置粒子的速度
        emitterCell.velocity = 50
        //設(shè)置粒子的速度范圍
        emitterCell.velocityRange = 50
        //設(shè)置粒子參數(shù)的速度乘數(shù)因子
        emitterCell.birthRate = 0
        //設(shè)置粒子的生命周期
        emitterCell.lifetime = 1
        //設(shè)置粒子透明度的改變速度
        emitterCell.alphaSpeed = -1
        //設(shè)置要展現(xiàn)的圖片
        emitterCell.contents = UIImage(named: "fire.png")!.cgImage
        emitterLayer.emitterCells = [emitterCell]
    }
    @objc func iconTap() {
        print(7777)
        UIView.animate(withDuration: 0.5) {
            let basic = CABasicAnimation(keyPath: "emitterCells.emitterButton.birthRate")
            basic.fromValue = 100
            basic.toValue = 0
            basic.duration = 0
            basic.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
            self.emitterLayer.add(basic, forKey: nil)
        }
    }
效果圖.gif

火焰

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.black
        let emitterCell = CAEmitterCell()
        emitterCell.name = "fire"
        emitterCell.emissionLongitude  = CGFloat.pi// emissionLongitude:x-y 平面的 發(fā) 射方向
        emitterCell.velocity            = -10// 粒子速度 負數(shù)表明向上燃燒
        emitterCell.velocityRange        = 50// 粒子速度范圍
        emitterCell.emissionRange        = 1.1//周圍發(fā)射角度
        emitterCell.yAcceleration        = -200// 粒子y方向的加速度分量
        emitterCell.scaleSpeed            = 0.2// 縮放比例 超大火苗
        emitterCell.color = UIColor(red: 0.7 ,green: 0.4 ,blue:0.2 ,alpha:0.1).cgColor
        emitterCell.contents = UIImage(named: "fire.png")!.cgImage

        let emitterLayer = CAEmitterLayer()
        emitterLayer.position = self.view.center// 粒子發(fā)射位置
        emitterLayer.emitterSize = CGSize(width: 50, height: 10)// 控制火苗大小
        emitterLayer.renderMode = kCAEmitterLayerAdditive
        emitterLayer.emitterMode = kCAEmitterLayerOutline// 控制發(fā)射源模式 即形狀
        emitterLayer.emitterShape = kCAEmitterLayerLine
        emitterLayer.emitterCells = [emitterCell]
        self.view.layer.addSublayer(emitterLayer)
        emitterLayer.setValue(500, forKeyPath: "emitterCells.fire.birthRate")
        emitterLayer.setValue(1, forKeyPath: "emitterCells.fire.lifetime")
    }
}
效果圖.gif

霓虹效果

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.black
        
        let emitterCell = CAEmitterCell()
        
        emitterCell.name = "nenolight"
        emitterCell.emissionLongitude  = CGFloat.pi * 2// emissionLongitude:x-y 平面的 發(fā) 射方向
        emitterCell.velocity = 50// 粒子速度
        emitterCell.velocityRange = 50// 粒子速度范圍
        emitterCell.scaleSpeed = -0.2// 縮放比例 超大火苗
        emitterCell.scale = 0.1
        emitterCell.greenSpeed = -0.1
        emitterCell.redSpeed = -0.2
        emitterCell.blueSpeed = 0.1
        emitterCell.alphaSpeed = -0.2
        emitterCell.birthRate = 100
        emitterCell.lifetime = 4
        emitterCell.color = UIColor.white.cgColor
        emitterCell.contents = UIImage(named: "neonlight.png")!.cgImage
        
        let emitterLayer = CAEmitterLayer()

        emitterLayer.position = self.view.center// 粒子發(fā)射位置
        emitterLayer.emitterSize = CGSize(width: 2, height: 2)// 控制粒子大小
        emitterLayer.renderMode = kCAEmitterLayerBackToFront
        emitterLayer.emitterMode = kCAEmitterLayerOutline// 控制發(fā)射源模式 即形狀
        emitterLayer.emitterShape = kCAEmitterLayerCircle
        
        emitterLayer.emitterCells = [emitterCell]

        self.view.layer.addSublayer(emitterLayer)

    }

}
效果圖.gif

參考文章

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子卒煞,更是在濱河造成了極大的恐慌状土,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機诀紊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隅俘,“玉大人邻奠,你說我怎么就攤上這事∥樱” “怎么了碌宴?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蒙畴。 經(jīng)常有香客問我贰镣,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任八孝,我火速辦了婚禮董朝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘干跛。我一直安慰自己,他們只是感情好祟绊,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布楼入。 她就那樣靜靜地躺著,像睡著了一般牧抽。 火紅的嫁衣襯著肌膚如雪嘉熊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天扬舒,我揣著相機與錄音阐肤,去河邊找鬼。 笑死讲坎,一個胖子當著我的面吹牛孕惜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晨炕,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼衫画,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瓮栗?” 一聲冷哼從身側(cè)響起削罩,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎费奸,沒想到半個月后弥激,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡愿阐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年微服,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片换况。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡职辨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出戈二,到底是詐尸還是另有隱情舒裤,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布觉吭,位于F島的核電站腾供,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伴鳖,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一节值、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧榜聂,春花似錦搞疗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至豌汇,卻和暖如春幢炸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拒贱。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工宛徊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逻澳。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓闸天,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赡盘。 傳聞我的和親對象是個殘疾皇子号枕,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容