【IOS】粒子效果 實(shí)現(xiàn)下雨,下雪,煙花效果

先看效果圖

snow.gif
rain.gif
煙花.gif

代碼:
下雪效果

 self.backgroundColor  = [UIColor blackColor];
    // 創(chuàng)建粒子Layer
    CAEmitterLayer *snowEmitter = [CAEmitterLayer layer];
    // 粒子發(fā)射位置
    snowEmitter.emitterPosition = CGPointMake(self.sizeWidth/2,20);
    // 發(fā)射源的尺寸大小
    snowEmitter.emitterSize = self.bounds.size;
    // 發(fā)射模式
    snowEmitter.emitterMode = kCAEmitterLayerSurface;
    // 發(fā)射源的形狀
    snowEmitter.emitterShape = kCAEmitterLayerLine;
    // 創(chuàng)建雪花類型的粒子
    CAEmitterCell *snowflake = [CAEmitterCell emitterCell];
    // 粒子的名字
    snowflake.name = @"snow";
    // 粒子參數(shù)的速度乘數(shù)因子
    snowflake.birthRate = 100.0;  //每秒生成數(shù)量
    snowflake.lifetime = 60;        //生存時(shí)間
    // 粒子速度
    snowflake.velocity =10.0;
    // 粒子的速度范圍
    snowflake.velocityRange = 10;
    // 粒子y方向的加速度分量
    snowflake.yAcceleration = 8;
    // 周圍發(fā)射角度
    snowflake.emissionRange = 0.5 * M_PI;
    // 子旋轉(zhuǎn)角度范圍
    snowflake.spinRange = 0.25 * M_PI;
    snowflake.contents = (id)[[UIImage imageNamed:@"snow"] CGImage];
    // 設(shè)置雪花形狀的粒子的顏色
    snowflake.color = [[UIColor whiteColor] CGColor];
    //縮放范圍
    snowflake.scaleRange = 0.3f;
    snowflake.scale = 0.1f;
    
    snowEmitter.shadowOpacity = 1.0;
    snowEmitter.shadowRadius = 0.0;
    snowEmitter.shadowOffset = CGSizeMake(0.0, 0.0);
    // 粒子邊緣的顏色
    snowEmitter.shadowColor = [[UIColor whiteColor] CGColor];    
    // 添加粒子
    snowEmitter.emitterCells = @[snowflake];
    
    // 將粒子Layer添加進(jìn)圖層中
    [self.layer addSublayer:snowEmitter];

下雨效果:


    self.backgroundColor =[UIColor whiteColor];
    //發(fā)射器
    CAEmitterLayer *rainEmitter =[CAEmitterLayer layer];
    
    rainEmitter.emitterShape    = kCAEmitterLayerLine;
    rainEmitter.emitterMode     = kCAEmitterLayerOutline;
    rainEmitter.emitterSize     = self.bounds.size;
    rainEmitter.renderMode      = kCAEmitterLayerAdditive;
    rainEmitter.emitterPosition = CGPointMake(self.sizeWidth/2, 20);
    //水滴
    CAEmitterCell *rainflake    = [CAEmitterCell emitterCell];
    rainflake.birthRate         = 50;   //每秒發(fā)出的數(shù)量

    //rainflake.speed             = 10;   //速度
    rainflake.velocity          = 300;   //加速度
    //rainflake.velocityRange     = 75;   //加速度范圍
    rainflake.yAcceleration     = 500;  //重力
    
    rainflake.contents          = (id)[UIImage imageNamed:@"rain"].CGImage;
    rainflake.color             = [UIColor whiteColor].CGColor;
    rainflake.lifetime          = 2;   //生命周期
    rainflake.scale             = 0.3;  //縮放
    rainflake.scaleRange        = 0.2;

    //水花
    CAEmitterCell *rainSpark =[CAEmitterCell emitterCell];
    
    rainSpark.birthRate         = 1;
    rainSpark.velocity          = 0;
    //rainSpark.emissionRange     = M_PI;//180度
    //rainSpark.yAcceleration     = 40;
    rainSpark.scale             = 0.5;
    rainSpark.contents          = (id)[UIImage imageNamed:@"snow"].CGImage;
    rainSpark.color=[UIColor whiteColor].CGColor;
    rainSpark.lifetime          =  0.3;
    
    //
    
    // and finally, the sparks
    CAEmitterCell* spark = [CAEmitterCell emitterCell];
    
    spark.birthRate            = 50;       //炸開后產(chǎn)生40花
    spark.velocity             = 50;       //速度
    spark.velocityRange        = 20;
    spark.emissionRange        = M_PI;   // 360 度
    spark.yAcceleration        = 40;         // 重力
    spark.lifetime             = 0.5;
    
    spark.contents          = (id) [[UIImage imageNamed:@"snow"] CGImage];
    spark.scaleSpeed        = 0.2;
    spark.scale             = 0.2;
    spark.color =[UIColor whiteColor].CGColor;
    spark.alphaSpeed        =- 0.25;
    spark.spin              = 2* M_PI;
    spark.spinRange         = 2* M_PI;
    
    rainEmitter.emitterCells    = @[rainflake];
    rainflake.emitterCells      = @[rainSpark];
    rainSpark.emitterCells      = @[spark];
    
    [self.layer addSublayer:rainEmitter];

煙花效果

self.backgroundColor  = [UIColor blackColor];
    
    //cell產(chǎn)生在底部,向上移動(dòng)
    CAEmitterLayer *fireworkdEmitter =[CAEmitterLayer layer];
    CGRect viewBounds = self.layer.bounds;
    
    fireworkdEmitter.emitterPosition =CGPointMake(viewBounds.size.width/2, viewBounds.size.height);
    fireworkdEmitter.emitterMode = kCAEmitterLayerOutline;
    fireworkdEmitter.emitterShape = kCAEmitterLayerLine;
    fireworkdEmitter.renderMode = kCAEmitterLayerAdditive;
    fireworkdEmitter.seed = (arc4random()%100)+1;
    
    //創(chuàng)建火箭cell
    CAEmitterCell *rocket = [CAEmitterCell emitterCell];
    rocket.birthRate = 1;
    rocket.emissionRange = 0.25 *M_PI;
    rocket.velocity = 300;
    rocket.velocityRange = 75;
    rocket.lifetime =1.02;
    
    rocket.contents = (id)[UIImage imageNamed:@"DazFire"].CGImage;
    rocket.scale = 0.5;
    rocket.scaleRange =0.5;
    rocket.color = [UIColor redColor].CGColor;
    rocket.greenRange = 1.0;
    rocket.redRange = 1.0;
    rocket.blueRange = 1.0;
    rocket.spinRange =M_PI;
    
    //破裂對(duì)象不能被看到,但會(huì)產(chǎn)生火花
    //這里我們改變顏色,因?yàn)榛鸹ɡ^承它的值
    CAEmitterCell *fireCell =[CAEmitterCell emitterCell];
    
    fireCell.birthRate          = 1;
    fireCell.velocity           = 0;
    fireCell.scale              = 1;
    fireCell.redSpeed           =- 1.5;
    fireCell.blueSpeed          =+ 1.5;
    fireCell.greenSpeed         =+ 1.5;        // shifting
    fireCell.lifetime           = 0.34;
    
    
    // and finally, the sparks
    CAEmitterCell* spark = [CAEmitterCell emitterCell];
    
    spark.birthRate            = 400;       //炸開后產(chǎn)生400個(gè)小煙花
    spark.velocity             = 125;       //速度
    spark.emissionRange        = 2* M_PI;   // 360 度
    spark.yAcceleration        = 40;         // 重力
    spark.lifetime             = 3;
    
    spark.contents          = (id) [[UIImage imageNamed:@"snow"] CGImage];
    spark.scaleSpeed        =- 0.2;
    
    spark.greenSpeed        =- 0.1;
    spark.redSpeed          =+ 0.1;
    spark.blueSpeed         =- 0.1;
    
    spark.alphaSpeed        =- 0.25;
    
    spark.spin              = 2* M_PI;
    spark.spinRange         = 2* M_PI;
    
    fireworkdEmitter.emitterCells        = [NSArray arrayWithObject:rocket];
    rocket.emitterCells                  = [NSArray arrayWithObject:fireCell];
    fireCell.emitterCells                = [NSArray arrayWithObject:spark];
    
    [self.layer addSublayer:fireworkdEmitter];

Demo地址:https://github.com/yuying2012/WJDStudyLibrary
這是一個(gè)大工程,請(qǐng)從工程中尋找相關(guān)模塊代碼.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缴饭,一起剝皮案震驚了整個(gè)濱河市坦敌,隨后出現(xiàn)的幾起案子狭吼,更是在濱河造成了極大的恐慌冶共,老刑警劉巖轧抗,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件责球,死亡現(xiàn)場離奇詭異滤馍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)配乓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門仿滔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人犹芹,你說我怎么就攤上這事崎页。” “怎么了腰埂?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵飒焦,是天一觀的道長。 經(jīng)常有香客問我盐固,道長荒给,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任刁卜,我火速辦了婚禮,結(jié)果婚禮上曙咽,老公的妹妹穿的比我還像新娘蛔趴。我一直安慰自己,他們只是感情好例朱,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布孝情。 她就那樣靜靜地躺著,像睡著了一般洒嗤。 火紅的嫁衣襯著肌膚如雪箫荡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天渔隶,我揣著相機(jī)與錄音羔挡,去河邊找鬼洁奈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛绞灼,可吹牛的內(nèi)容都是我干的利术。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼低矮,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼印叁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起军掂,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤轮蜕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蝗锥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肠虽,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年玛追,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了税课。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡痊剖,死狀恐怖韩玩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情陆馁,我是刑警寧澤找颓,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站叮贩,受9級(jí)特大地震影響击狮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜益老,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一彪蓬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捺萌,春花似錦档冬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至态坦,卻和暖如春盐数,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伞梯。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國打工玫氢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留帚屉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓琐旁,卻偏偏與公主長得像涮阔,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灰殴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,321評(píng)論 25 707
  • afinalAfinal是一個(gè)android的ioc敬特,orm框架 https://github.com/yangf...
    passiontim閱讀 15,440評(píng)論 2 45
  • 一個(gè)企業(yè)制定屬于自己的規(guī)章制度,每個(gè)參與的人員都必須遵循制度規(guī)則牺陶。 首先考慮執(zhí)行的過程中發(fā)生問題伟阔,事先把制度公布給...
    楊平的閱讀 259評(píng)論 0 1
  • 一、CoreMotion框架介紹 我們知道有一些iOS的應(yīng)用掰伸,會(huì)有一些特殊的要求皱炉,比如: 電子羅盤指南針之類的應(yīng)用...
    charlotte2018閱讀 1,288評(píng)論 0 3
  • Y先生悄悄的走了,正如他悄悄的來時(shí)那般狮鸭。既沒有揮他的衣袖合搅,也沒有帶走這里的云彩。來時(shí)這座石油巨獸已經(jīng)入睡歧蕉,只...
    楊師傅007閱讀 389評(píng)論 0 0