粒子效果動畫使用總結(jié)

我們常見的一些像下雪讲婚、下雨尿孔、火苗這類的動畫,都是可以使用粒子效果來實現(xiàn)筹麸。主要使用了類CAEmitterLayerCAEmitterCell來實現(xiàn)活合。下面我們將通過實現(xiàn)一個下雪的效果來說明該類的使用方法和各個屬性的含義。

CAEmitterLayer 可理解為粒子發(fā)射器

創(chuàng)建一個CAEmitterLayer的實例物赶,也就是創(chuàng)建一個發(fā)射器白指。

CGRect rect = CGRectMake(0, 100, self.view.bounds.size.width, 50);
//創(chuàng)建發(fā)射器
CAEmitterLayer *emitter = [CAEmitterLayer layer];
emitter.frame = rect;
[self.view.layer addSublayer:emitter];

設(shè)置發(fā)射器類型

//設(shè)置發(fā)射器類型
emitter.emitterShape = kCAEmitterLayerRectangle;

這時候就要說一下屬性emitterShape的取值了。有6種取值kCAEmitterLayerPoint酵紫、kCAEmitterLayerLine告嘲、kCAEmitterLayerRectangle错维、kCAEmitterLayerCuboidkCAEmitterLayerCirclekCAEmitterLayerSphere橄唬。簡單介紹幾種

  • kCAEmitterLayerPoint 設(shè)置為該類型赋焕,發(fā)射器的所有粒子都將從一個相同的點創(chuàng)建。這個點是發(fā)射器的position仰楚。
  • kCAEmitterLayerLine 設(shè)置為該值隆判,所有粒子都將在發(fā)射器最上端的創(chuàng)建。
  • kCAEmitterLayerRectangle 設(shè)置為該值僧界,所有粒子都在發(fā)射器的整個區(qū)域創(chuàng)建侨嘀。

其他三種先不說了。
需要注意的捂襟,上述所說的區(qū)域不是emitterLayer的咬腕,而是由屬性emitterPositionemitterSize來確認(rèn)的。
下面就來設(shè)置這兩個屬性的值笆豁,在該例子中郎汪,將其設(shè)置為和layer一樣了。

emitter.emitterPosition = CGPointMake(rect.size.width*0.5, rect.size.height*0.5);
emitter.emitterSize = rect.size;

CAEmitterCell 可理解為我們要發(fā)射的例子

和我們之前說過的Animation一樣闯狱,CAEmitterCell也只不過是我們?yōu)槟阌脕碚宫F(xiàn)粒子形態(tài)的一個數(shù)據(jù)模型煞赢。

我們創(chuàng)建一個粒子,并且將圖片flake.png作為其內(nèi)容哄孤。接下來發(fā)射器會創(chuàng)建他的很多各種各樣的拷貝來模擬真實的雪花照筑。

CAEmitterCell *emitterCell = [CAEmitterCell emitterCell];
emitterCell.contents = (__bridge id _Nullable)([UIImage imageNamed:@"flake"].CGImage);

接著添加代碼

//設(shè)置粒子創(chuàng)建速率,也就是每秒產(chǎn)生的個數(shù)
emitterCell.birthRate = 20;
//設(shè)置粒子的生命周期瘦陈,也就是在屏幕上存在的時間
emitterCell.lifetime = 3.5;
//將粒子賦給發(fā)射器
emitter.emitterCells = @[emitterCell];

需要解釋的是emitterCells屬性凝危。我們將emitterCells屬性設(shè)置為一個存放著CAEmitterCell類型數(shù)據(jù)的數(shù)組。同一個發(fā)射器是可以發(fā)射不同類型的粒子的晨逝。

這回運(yùn)行程序蛾默,我們將看到這樣的效果

我們發(fā)現(xiàn)雖然產(chǎn)生了粒子,但是他們并不會運(yùn)動捉貌。所以支鸡,繼續(xù)努力
添加代碼

//設(shè)置粒子創(chuàng)建速率,也就是每秒產(chǎn)生的個數(shù)
emitterCell.birthRate = 200;
//設(shè)置粒子的生命周期趁窃,也就是在屏幕上存在的時間
emitterCell.lifetime = 3.5;
//設(shè)置粒子聲明周期范圍
emitterCell.lifetimeRange = 1.0;
//將粒子賦給發(fā)射器
emitter.emitterCells = @[emitterCell];
//設(shè)置y軸上的加速度
emitterCell.yAcceleration = 70.0f;
//設(shè)置x軸上的加速度
emitterCell.xAcceleration = 10.0f;
//設(shè)置粒子的初始速度
emitterCell.velocity = 20;
//設(shè)置粒子的初始角度 如果不設(shè)置這個值牧挣,我們發(fā)現(xiàn)粒子都是水平發(fā)射的
emitterCell.emissionLongitude = -M_PI_2;
//設(shè)置粒子的初始速度范圍 在此例子中范圍是 -180~220
emitterCell.velocityRange = 200.0f;
//設(shè)置粒子的初始角度范圍 此例子的范圍為 M_PI~0
emitterCell.emissionRange = M_PI_2;
//設(shè)置粒子的顏色
emitterCell.color = [UIColor colorWithRed:0.9 green:1.0 blue:1.0 alpha:1.0].CGColor;
//我們也可以設(shè)置隨機(jī)顏色,并且限定范圍醒陆。因為RGB的值最大為1.0,那Red來說瀑构,范圍并不會變?yōu)?.6~1.3,而是0.6~1.0。相似的刨摩,如果是負(fù)值寺晌,則最小為0
emitterCell.redRange = 0.3;
emitterCell.greenRange = 0.3;
emitterCell.blueRange = 0.3;

//設(shè)置粒子的大小及其大小范圍
emitterCell.scale = 0.8;
emitterCell.scaleRange = 0.8;

//設(shè)置讓粒子隨著時間推移每秒減小15%,如果設(shè)置為正值則每秒增加
emitterCell.scaleSpeed = -0.15;

//設(shè)置粒子透明度的變化范圍
emitterCell.alphaRange = 0.75;
//設(shè)置粒子變化速度
emitterCell.alphaSpeed = -0.15;

好多屬性都是有range相關(guān)的類型世吨,都是指定的范圍,沒有一個個的寫折剃。
最終效果:

github地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末另假,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子怕犁,更是在濱河造成了極大的恐慌,老刑警劉巖己莺,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奏甫,死亡現(xiàn)場離奇詭異,居然都是意外死亡凌受,警方通過查閱死者的電腦和手機(jī)阵子,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胜蛉,“玉大人挠进,你說我怎么就攤上這事√懿幔” “怎么了领突?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長案怯。 經(jīng)常有香客問我君旦,道長,這世上最難降的妖魔是什么嘲碱? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任金砍,我火速辦了婚禮,結(jié)果婚禮上麦锯,老公的妹妹穿的比我還像新娘恕稠。我一直安慰自己,他們只是感情好扶欣,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布鹅巍。 她就那樣靜靜地躺著,像睡著了一般宵蛀。 火紅的嫁衣襯著肌膚如雪昆著。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天术陶,我揣著相機(jī)與錄音凑懂,去河邊找鬼。 笑死梧宫,一個胖子當(dāng)著我的面吹牛接谨,可吹牛的內(nèi)容都是我干的摆碉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼脓豪,長吁一口氣:“原來是場噩夢啊……” “哼巷帝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扫夜,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤楞泼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后笤闯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堕阔,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年颗味,在試婚紗的時候發(fā)現(xiàn)自己被綠了超陆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡浦马,死狀恐怖时呀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晶默,我是刑警寧澤谨娜,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站荤胁,受9級特大地震影響瞧预,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仅政,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一垢油、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧圆丹,春花似錦滩愁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至倦微,卻和暖如春妻味,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背欣福。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工责球, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓雏逾,卻偏偏與公主長得像嘉裤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子栖博,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

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