iOS動畫開發(fā) 粒子效果 CAEmitterLayer

ios的粒子效果主要有兩部分組成

  • 發(fā)射器:發(fā)射器主要設(shè)置粒子發(fā)射的宏觀屬性
  • 粒子單元:設(shè)置相應(yīng)的粒子屬性
    發(fā)射器是基于layer層的,常用屬性有:

一嘉汰、發(fā)射器

  • emitterCells 粒子單元數(shù)組斟冕,例如你在繪制火焰的效果時螃宙,你可以創(chuàng)建兩個單元惶傻,一個單元負(fù)責(zé)煙霧嚼摩,一個單元負(fù)責(zé)火苗灶体。
  • birthRate 粒子的創(chuàng)建速率阅签,默認(rèn)為1/s。
  • lifetime 粒子的存活時間蝎抽。默認(rèn)為1S政钟。
  • emitterPosition 發(fā)射器在xy平面的中心位置
  • emitterZPosition 發(fā)射器在Z平面的位置
  • emitterSize 發(fā)射器的尺寸大小
  • emitterDepth 發(fā)射器的深度,在某些模式下會產(chǎn)生立體效果
  • emitterShape 發(fā)射器的形狀织中,這個參數(shù)的幾個系統(tǒng)字符串如下:
  CA_EXTERN NSString * const kCAEmitterLayerPoint
   __OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0); //點的形狀锥涕,粒子從一個點發(fā)出
  CA_EXTERN NSString * const kCAEmitterLayerLine
   __OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//線的形狀,粒子從一條線發(fā)出
  CA_EXTERN NSString * const kCAEmitterLayerRectangle
   __OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//矩形形狀狭吼,粒子從一個矩形中發(fā)出
  CA_EXTERN NSString * const kCAEmitterLayerCuboid
   __OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//立方體形狀层坠,會影響Z平面的效果
  CA_EXTERN NSString * const kCAEmitterLayerCircle
  __OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//圓形,粒子會在圓形范圍發(fā)射
  CA_EXTERN NSString * const kCAEmitterLayerSphere
  __OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//球型
  • emitterMode 發(fā)射器的發(fā)射模式刁笙,參數(shù)如下:
  CA_EXTERN NSString * const kCAEmitterLayerPoints
  __OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//從發(fā)射器中發(fā)出
  CA_EXTERN NSString * const kCAEmitterLayerOutline
  __OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//從發(fā)射器邊緣發(fā)出
  CA_EXTERN NSString * const kCAEmitterLayerSurface
  __OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//從發(fā)射器表面發(fā)出
  CA_EXTERN NSString * const kCAEmitterLayerVolume
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//從發(fā)射器中點發(fā)出
  • renderMode 發(fā)射器渲染模式破花,參數(shù)如下:
CA_EXTERN NSString * const kCAEmitterLayerUnordered
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//這種模式下,粒子是無序出現(xiàn)的疲吸,多個發(fā)射源將混合
CA_EXTERN NSString * const kCAEmitterLayerOldestFirst
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//這種模式下座每,聲明久的粒子會被渲染在最上層
CA_EXTERN NSString * const kCAEmitterLayerOldestLast
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//這種模式下,年輕的粒子會被渲染在最上層
CA_EXTERN NSString * const kCAEmitterLayerBackToFront
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//這種模式下摘悴,粒子的渲染按照Z軸的前后順序進(jìn)行
CA_EXTERN NSString * const kCAEmitterLayerAdditive
__OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_5_0);//這種模式會進(jìn)行粒子混合
  • preservesDepth 是否開啟三維空間效果
  • velocity 粒子的運動速度
  • scale 粒子的縮放大小
  • spin 粒子的旋轉(zhuǎn)位置
  • seed 初始化隨機(jī)的粒子種子

二峭梳、粒子單元

設(shè)置好了粒子發(fā)射器,我們還需要初始化一些粒子單元,設(shè)置具體粒子的屬性葱椭,我們使用到的類是CAEmitterCell這個類捂寿。

  • name 設(shè)置發(fā)射單元的名稱
  • enabled 是否允許發(fā)射器渲染
  • birthRate 粒子的創(chuàng)建速率
  • lifetime 粒子的生存時間
  • lifetimeRange 粒子的生存時間容差
  • emissionLatitude 粒子在Z軸方向的發(fā)射角度
  • emissionLongitude 粒子在xy平面的發(fā)射角度
  • emissionRange 粒子發(fā)射角度的容差
  • velocity 粒子的速度
  • velocityRange 粒子速度的容差
  • xAcceleration
  • yAcceleration x,y孵运,z三個方向的加速度
  • zAcceleration
  • scale
  • scaleRange 縮放大小秦陋,縮放容差和縮放速度
  • scaleSpeed
  • spin
  • spinRange 旋轉(zhuǎn)度與旋轉(zhuǎn)容差
  • color粒子的顏色
  • redRange
  • greenRange
  • blueRange
  • alphaRange 粒子在rgb三個色相上的容差和透明度的容差
  • redSpeed
  • greenSpeed
  • blueSpeed
  • alphaSpeed 粒子在RGB三個色相上的變化速度和透明度的變化速度
  • contents 渲染粒子,可以設(shè)置為一個CGImage的對象
  • contentsRect 渲染的范圍

demo 效果

    let fireEmitterLayer = CAEmitterLayer()//創(chuàng)建粒子發(fā)射器
    fireEmitterLayer.emitterPosition = CGPoint(x: ZLScreenWidth * 0.5, y: ZLScreenHeight - 20 - 64)
    fireEmitterLayer.emitterSize = CGSize(width: ZLScreenWidth - 100, height: 20)
    fireEmitterLayer.renderMode = kCAEmitterLayerAdditive
    //創(chuàng)建發(fā)射單元
    let fire = CAEmitterCell()
    fire.contents = UIImage(named:"111")?.cgImage//圖片像素一定要特別小不然沒有效果且特變卡
    fire.birthRate = 100
    fire.lifetime = 2.0
    fire.lifetimeRange = 1.5
    fire.color = UIColor(colorLiteralRed: 0.8, green: 0.4, blue: 0.2, alpha: 1).cgColor
    fire.name = "fire"
    fire.velocity = 160
    fire.velocityRange = 80
    fire.emissionLongitude = CGFloat(M_PI + M_PI_2)
    fire.emissionRange = CGFloat(M_PI_2)
    fire.scaleSpeed = 0.3
    fire.spin = 0.2
    let smoke = CAEmitterCell()
    smoke.birthRate = 400
    smoke.lifetime = 3.0
    smoke.lifetimeRange = 1.5
    smoke.color = UIColor(colorLiteralRed: 1, green: 1, blue: 1, alpha: 0.05).cgColor
    smoke.contents = UIImage(named: "111")?.cgImage
    smoke.name = "smoke"
    smoke.velocity = 250
    smoke.velocityRange = 100
    smoke.emissionLongitude = CGFloat(M_PI + M_PI_2)
    smoke.emissionRange = CGFloat(M_PI_2)
    fireEmitterLayer.emitterCells = [fire,smoke]
    self.view.layer.addSublayer(fireEmitterLayer)
粒子效果1.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末治笨,一起剝皮案震驚了整個濱河市驳概,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旷赖,老刑警劉巖顺又,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異杠愧,居然都是意外死亡待榔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門流济,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锐锣,“玉大人,你說我怎么就攤上這事绳瘟〉胥荆” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵糖声,是天一觀的道長斤彼。 經(jīng)常有香客問我,道長蘸泻,這世上最難降的妖魔是什么琉苇? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮悦施,結(jié)果婚禮上并扇,老公的妹妹穿的比我還像新娘。我一直安慰自己抡诞,他們只是感情好穷蛹,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著昼汗,像睡著了一般肴熏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顷窒,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天蛙吏,我揣著相機(jī)與錄音,去河邊找鬼。 笑死鸦做,一個胖子當(dāng)著我的面吹牛璧疗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼窿冯,長吁一口氣:“原來是場噩夢啊……” “哼扼倘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起彤叉,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后矢炼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡阿纤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年句灌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欠拾。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡胰锌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出藐窄,到底是詐尸還是另有隱情资昧,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布荆忍,位于F島的核電站格带,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏刹枉。R本人自食惡果不足惜叽唱,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望微宝。 院中可真熱鬧棺亭,春花似錦、人聲如沸芥吟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钟鸵。三九已至钉稍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棺耍,已是汗流浹背贡未。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人俊卤。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓嫩挤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親消恍。 傳聞我的和親對象是個殘疾皇子岂昭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

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