iOS-粒子系統(tǒng)

iOS的粒子系統(tǒng)是通過(guò)CAEmitterCell創(chuàng)建,然后通過(guò)CAEmitterLayer發(fā)射層進(jìn)行發(fā)射。 導(dǎo)入框架#import <QuartzCore>

  • 下面介紹CAEmitterCell的基本屬性
 + (instancetype)emitterCell;// UIKit根據(jù)這個(gè)發(fā)射粒子和定義的基礎(chǔ)上創(chuàng)建一個(gè)隨機(jī)粒子。此原型包括一些屬性來(lái)控制粒子的圖片火鼻,顏色振峻,方向,運(yùn)動(dòng)砰琢,縮放比例和生命周期。

 @property(nullable) CGColorRef color; //粒子的顏色

 @property float alphaRange;// 一個(gè)粒子的顏色alpha能改變的范圍

 @property float alphaSpeed; //粒子透明度在生命周期內(nèi)的改變速度

 @property float redRange; 
 @property float greenRange; 
 @property float blueRange; ///一個(gè)粒子的顏色blue,green,red能改變的范圍

 @property float redSpeed; 
 @property float greenSpeed; 
 @property float blueSpeed; ///一個(gè)粒子blue,green,red在生命周期內(nèi)改變的速度

 @property(nullable, strong) id contents; //粒子要展現(xiàn)的圖片,CGImageRef類型氯析,否則不顯示

 @property CGRect contentsRect; //渲染的范圍

 @property CGFloat emissionLatitude; //發(fā)射Z軸方向的發(fā)射角度

 @property CGFloat emissionLongitude; //粒子在xy平面的發(fā)射角度

 @property CGFloat emissionRange; //粒子發(fā)射角度的容差

 @property(nullable, copy) NSArray<CAEmitterCell> *emitterCells; //粒子發(fā)射的粒子

 @property(getter=isEnabled) BOOL enabled; //粒子是否允許發(fā)射器渲染

 @property float lifetime;// 粒子生存時(shí)間

 @property float lifetimeRange; //粒子生存時(shí)間范圍亏较,設(shè)置之后 lifetime +/-= lifetimeRange

 @property(copy) NSString *minificationFilter; 
 @property(copy) NSString *magnificationFilter;// 減小,增加自己的大小

 @property float minificationFilterBias;// 減少大小的因子

 @property(nullable, copy) NSString *name; //粒子的名字

 @property CGFloat scale; //粒子縮放大小

 @property CGFloat scaleRange; //粒子縮放范圍

 @property CGFloat scaleSpeed; //粒子縮放速度

 @property CGFloat spin; //旋轉(zhuǎn)角度

 @property CGFloat spinRange; //旋轉(zhuǎn)角度范圍

 @property CGFloat velocity; //粒子的速度

 @property CGFloat velocityRange;// 粒子速度范圍

 @property CGFloat xAcceleration;
 @property CGFloat yAcceleration;
 @property CGFloat zAcceleration; //粒子在x,y,x方向的加速度

發(fā)射層CAEmitterLayer屬性

  + (instancetype)layer;
  // 由很多emitterCell組成的發(fā)射層,控制粒子的形狀掩缓,發(fā)射位置雪情,提供了一個(gè)粒子發(fā)射器系統(tǒng)為核心的動(dòng)畫

  @property(nullable, copy) NSArray<CAEmitterCell> *emitterCells; 
  //裝著   CAEmitterCell對(duì)象的粒子單元數(shù)組,被用于把粒子投放到layer上

  @property CGPoint emitterPosition; //發(fā)射器在xy平面的中心位置

  @property CGFloat emitterZPosition;// 發(fā)射器的Z平面位置

  @property CGSize emitterSize; //發(fā)射器的尺寸大小

  @property CGFloat emitterDepth; //發(fā)射器的深度你辣,在某些模式下會(huì)產(chǎn)生立體效果

  @property(copy) NSString *emitterMode; //發(fā)射模式

  kCAEmitterLayerPoints //從發(fā)射器中發(fā)出 
  kCAEmitterLayerOutline //從發(fā)射器邊緣發(fā)出
  kCAEmitterLayerSurface //從發(fā)射器表面發(fā)出 
  kCAEmitterLayerVolume //從發(fā)射器中點(diǎn)發(fā)出

  @property(copy) NSString *emitterShape; //發(fā)射器的形狀

  kCAEmitterLayerPoint //點(diǎn)的形狀巡通,粒子從一個(gè)點(diǎn)出發(fā) 
  kCAEmitterLayerLine //線的形狀,粒子從一條線出發(fā) 
  kCAEmitterLayerRectangle //矩形形狀,粒子從一個(gè)矩形出發(fā) 
  kCAEmitterLayerCuboid //立方體形狀舍哄,會(huì)影響Z平面的效果 
  kCAEmitterLayerCircle //圓形宴凉,粒子會(huì)在圓形范圍發(fā)射 kCAEmitterLayerSphere 球形
 
  @property(copy) NSString *renderMode;// 渲染模式

  kCAEmitterLayerUnordered //這種模式下,粒子是無(wú)序出現(xiàn)的表悬,多個(gè)發(fā)射源將混合        
  kCAEmitterLayerOldestFirst //這種模式下弥锄,生命久的粒子會(huì)被渲染在最上層       
  kCAEmitterLayerOldestLast// 這種模式下,年輕的粒子會(huì)被渲染在最上層   
  kCAEmitterLayerBackToFront //這種模式下蟆沫,粒子的渲染按照Z(yǔ)軸的前后順序進(jìn)行          
  kCAEmitterLayerAdditive //這種模式會(huì)進(jìn)行粒子混合
  @property BOOL preservesDepth; //是否開啟三維空間效果

  @property float birthRate; //粒子產(chǎn)生速度 默認(rèn)為1.0

  @property float lifetime; //粒子存活時(shí)間籽暇,默認(rèn)為1s

  @property float scale; //粒子的縮放大小

  @property unsigned int seed; //用于初始化隨機(jī)數(shù)產(chǎn)生的粒子

  @property float spin; //粒子的旋轉(zhuǎn)位置

  @property float velocity;// 粒子的運(yùn)動(dòng)速度

寫幾行代碼用起來(lái)

 CAEmitterLayer *fireEmitter = [CAEmitterLayer layer];
 fireEmitter.emitterPosition = CGPointMake(self.view.frame.size.width/2.0,    
 self.view.frame.size.height - 60);
 fireEmitter.emitterSize = CGSizeMake( 50, 0);
 fireEmitter.emitterShape = kCAEmitterLayerLine;
 fireEmitter.renderMode  = kCAEmitterLayerAdditive;
 //火焰
 CAEmitterCell* fire = [CAEmitterCell emitterCell];
 [fire setName:@"fire"];

 fire.birthRate   = 500;
 fire.emissionLongitude  = M_PI;
 fire.velocity   = -80;
 fire.velocityRange  = 30;
 fire.emissionRange  = 1.1;
 fire.yAcceleration  = -200;
 fire.scaleSpeed   = 0.3;
 fire.lifetime   = 1;
 fire.lifetimeRange  = 0.35;

 fire.color = [[UIColor colorWithRed:0.8 green:0.4 blue:0.2 alpha:0.1] CGColor];
 fire.contents = (id) [[UIImage imageNamed:@"DazFire"] CGImage];

 //煙霧
 CAEmitterCell* smoke = [CAEmitterCell emitterCell];
 [smoke setName:@"smoke"];

 smoke.birthRate   = 11;
 smoke.lifetime   = 4;
 smoke.velocity   = -40;
 smoke.velocityRange  = 20;
 smoke.emissionRange  = M_PI / 4;
 smoke.spinRange   = 6;
 smoke.yAcceleration  = -160;
 smoke.scale    = 0.1;
 smoke.alphaSpeed  = -0.12;
 smoke.scaleSpeed  = 0.7;

 smoke.contents   = (id) [[UIImage imageNamed:@"DazSmoke"] CGImage];
 smoke.color = [[UIColor colorWithWhite:0.5 alpha:0.3]CGColor];

 fireEmitter.emitterCells = @[smoke,fire];
 [self.view.layer addSublayer:fireEmitter];

產(chǎn)生火焰效果,抄錄一下,哪天要用的時(shí)候就不用到處找了饭庞,謝謝大神的分享!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末戒悠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舟山,更是在濱河造成了極大的恐慌绸狐,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件累盗,死亡現(xiàn)場(chǎng)離奇詭異寒矿,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)若债,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門劫窒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人拆座,你說(shuō)我怎么就攤上這事」谙ⅲ” “怎么了挪凑?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)逛艰。 經(jīng)常有香客問(wèn)我躏碳,道長(zhǎng),這世上最難降的妖魔是什么散怖? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任菇绵,我火速辦了婚禮肄渗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咬最。我一直安慰自己翎嫡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布永乌。 她就那樣靜靜地躺著惑申,像睡著了一般。 火紅的嫁衣襯著肌膚如雪翅雏。 梳的紋絲不亂的頭發(fā)上圈驼,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音望几,去河邊找鬼绩脆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛橄抹,可吹牛的內(nèi)容都是我干的靴迫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼害碾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼矢劲!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起慌随,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤芬沉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后阁猜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丸逸,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年剃袍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了黄刚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡民效,死狀恐怖憔维,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情畏邢,我是刑警寧澤业扒,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站舒萎,受9級(jí)特大地震影響程储,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一章鲤、第九天 我趴在偏房一處隱蔽的房頂上張望摊灭。 院中可真熱鬧,春花似錦败徊、人聲如沸帚呼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)萝挤。三九已至,卻和暖如春根欧,著一層夾襖步出監(jiān)牢的瞬間怜珍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工凤粗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酥泛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓嫌拣,卻偏偏與公主長(zhǎng)得像柔袁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子异逐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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