CAEmitterLayer

CAEmitterLayer簡介:

CAEmitterLayer(粒子發(fā)射器)繼承自CALayer史汗,提供了一個基于Core Animation的粒子發(fā)射系統(tǒng),粒子用CAEmitterCell來初始化列肢,一個單獨(dú)的CAEmitterLayer可同時支持多個CAEmitterCell。

CAEmitterLayer屬性:

emitterCells:CAEmitterCell對象的數(shù)組蝶缀,用于把粒子投放到layer上裳凸。

birthRate:粒子產(chǎn)生速度,默認(rèn)1個每秒缤至。

lifetime:粒子純在時間潮罪,默認(rèn)1秒。

emitterPosition:發(fā)射器在xy平面的中心位置领斥。

emitterZPosition:發(fā)射器在z平面的位置嫉到。

preservesDepth:是否開啟三維效果。

velocity:粒子運(yùn)動速度月洛。

scale:粒子的縮放比例何恶。

spin:自旋轉(zhuǎn)速度。

seed:用于初始化隨機(jī)數(shù)產(chǎn)生的種子嚼黔。

emitterSize:發(fā)射器的尺寸细层。

emitterDepth:發(fā)射器的深度惜辑。

emitterShape:發(fā)射器的形狀

NSString * const kCAEmitterLayerPoint;//點(diǎn)的形狀,粒子從一個點(diǎn)發(fā)出

NSString * const kCAEmitterLayerLine;//線的形狀疫赎,粒子從一條線發(fā)出

NSString * const kCAEmitterLayerRectangle;//矩形形狀韵丑,粒子從一個矩形中發(fā)出

NSString * const kCAEmitterLayerCuboid;//立方體形狀,會影響Z平面的效果

NSString * const kCAEmitterLayerCircle;//圓形虚缎,粒子會在圓形范圍發(fā)射

NSString * const kCAEmitterLayerSphere;//球型

emitterMode:發(fā)射器發(fā)射模式

NSString * const kCAEmitterLayerPoints;//從發(fā)射器中發(fā)出

NSString * const kCAEmitterLayerOutline;//從發(fā)射器邊緣發(fā)出

NSString * const kCAEmitterLayerSurface;//從發(fā)射器表面發(fā)出

NSString * const kCAEmitterLayerVolume;//從發(fā)射器中點(diǎn)發(fā)出

renderMode:發(fā)射器渲染模式

NSString * const kCAEmitterLayerUnordered;//粒子無序出現(xiàn)

NSString * const kCAEmitterLayerOldestFirst;//聲明久的粒子會被渲染在最上層

NSString * const kCAEmitterLayerOldestLast;//年輕的粒子會被渲染在最上層

NSString * const kCAEmitterLayerBackToFront;//粒子的渲染按照Z軸的前后順序進(jìn)行

NSString * const kCAEmitterLayerAdditive;//粒子混合

CAEmitterCell屬性:

emitterCell:初始化方法。

name:粒子的名字钓株。

color:粒子的顏色实牡。

enabled:粒子是否渲染。

contents:渲染粒子轴合,是個CGImageRef的對象创坞,即粒子要展示的圖片。

contentsRect:渲染范圍受葛。

birthRate:粒子產(chǎn)生速度题涨。

lifetime:生命周期。

lifetimeRange:生命周期增減范圍总滩。

velocity:粒子運(yùn)動速度纲堵。

velocityRange:速度范圍。

spin:粒子旋轉(zhuǎn)角度闰渔。

spinrange:粒子旋轉(zhuǎn)角度范圍席函。

scale:縮放比例。

scaleRange:縮放比例范圍冈涧。

scaleSpeed:縮放比例速度茂附。

alphaRange::一個粒子的顏色alpha能改變的范圍。

alphaSpeed::粒子透明度在生命周期內(nèi)的改變速度督弓。

redRange:一個粒子的顏色red能改變的范圍营曼。

redSpeed:粒子red在生命周期內(nèi)的改變速度。

blueRange:一個粒子的顏色blue能改變的范圍愚隧。

blueSpeed:粒子blue在生命周期內(nèi)的改變速度蒂阱。

greenRange:一個粒子的顏色green能改變的范圍。

greenSpeed:粒子green在生命周期內(nèi)的改變速度狂塘。

xAcceleration:粒子x方向的加速度分量蒜危。

yAcceleration:粒子y方向的加速度分量。

zAcceleration:粒子z方向的加速度分量睹耐。

emissionRange:粒子發(fā)射角度范圍辐赞。

emissionLongitude:粒子在xy平面的發(fā)射角度。

emissionLatitude:發(fā)射的z軸方向的發(fā)射角度硝训。

做了一個小Demo响委,效果圖如下:

下面貼上代碼:

[objc]view plaincopy

#import?"ViewController.h"

//獲得屏幕的寬高

#define?mainW?[UIScreen?mainScreen].bounds.size.width

#define?mainH?[UIScreen?mainScreen].bounds.size.height

@interfaceViewController?()

@property(nonatomic,strong)CAEmitterLayer*noteEmitter;

@property(nonatomic,strong)CAEmitterLayer*petalEmitter;

@property(nonatomic,strong)CAEmitterLayer*sunEmitter;

@end

@implementationViewController

-?(void)viewDidLoad?{

[superviewDidLoad];

self.view.backgroundColor=?[UIColorwhiteColor];

//創(chuàng)建控件

[selfcreatControl];

}

-?(void)creatControl

{

//唱歌小人背景

UIImageView*imageView?=?[[UIImageViewalloc]initWithFrame:CGRectMake((mainW?-170)?*0.5,?mainH?-350,170,230)];

imageView.image=?[UIImageimageNamed:@"bj.jpg"];

[self.viewaddSubview:imageView];

//按鈕標(biāo)題數(shù)組

NSArray*titleArray?=?@[@"唱歌",@"花瓣",@"太陽",@"停止"];

//按鈕寬度

CGFloat?btnWidth?=70;

//按鈕間距

CGFloat?padding?=?(mainW?-btnWidth*?titleArray.count)?/?(titleArray.count+1);

//創(chuàng)建按鈕

for(inti?=0;?i?<?titleArray.count;?i++)?{

UIButton*btn?=?[[UIButtonalloc]initWithFrame:CGRectMake(padding?+?(padding?+?btnWidth)?*?i,?CGRectGetMaxY(imageView.frame)?+20,?btnWidth,30)];

[btnsetTitle:titleArray[i]forState:UIControlStateNormal];

[btnsetBackgroundColor:[UIColororangeColor]];

btn.tag=?i;

[btnaddTarget:selfaction:@selector(btnOnClick:)forControlEvents:UIControlEventTouchUpInside];

[self.viewaddSubview:btn];

}

}

-?(void)btnOnClick:(UIButton*)btn

{

//唱歌按鈕點(diǎn)擊事件

if(btn.tag==0)?{

//重復(fù)點(diǎn)擊先清空發(fā)射器

[_noteEmitterremoveFromSuperlayer];

_noteEmitter?=nil;

//初始化發(fā)射器

_noteEmitter?=?[[CAEmitterLayeralloc]init];

//粒子發(fā)射位置

_noteEmitter.emitterPosition=?CGPointMake(mainW*0.5+15,390);

//發(fā)射源的尺寸大小

_noteEmitter.emitterSize=?CGSizeMake(10,10);

//發(fā)射模式

_noteEmitter.renderMode=?kCAEmitterLayerUnordered;

//發(fā)射源的形狀

_noteEmitter.emitterMode=?kCAEmitterLayerSurface;

//發(fā)射單元

NSMutableArray*cellArray?=?[NSMutableArrayarray];

for(inti?=0;?i?<3;?i++)?{

CAEmitterCell*note?=?[CAEmitterCellemitterCell];

//粒子產(chǎn)生速度

note.birthRate=0.7+0.5*?i;

note.speed=0.5;

//粒子移動速度

note.velocity=100;

//在原屬性上增減的范圍新思,現(xiàn)在粒子速度范圍是100?-?30?~?100?+?30(70?~?130),其他屬性后加Range同理

note.velocityRange=30;

//粒子生命周期

note.lifetime=0.8;

note.lifetimeRange=0.1;

//粒子旋轉(zhuǎn)速度

note.spin=1;

//粒子縮放比例

note.scale=0.1;

note.scaleSpeed=1;

//粒子透明度變化速度

//????????????note.alphaSpeed?=?-0.8;

//粒子發(fā)射角度

note.emissionLongitude=?M_PI?+?M_PI_2;

note.emissionRange=?M_PI_2;

//隨機(jī)生成圖片名字

NSString*str?=?[NSStringstringWithFormat:@"note%d",?arc4random_uniform(4)];

note.contents=?(__bridgeid)[[UIImageimageNamed:str]CGImage];

//粒子展示的圖片

NSString*name?=?[NSStringstringWithFormat:@"note%d",i];

//粒子的名字

note.name=?name;

[cellArrayaddObject:note];

}

_noteEmitter.emitterCells=?cellArray;

//添加到layer層

[self.view.layeraddSublayer:_noteEmitter];

//花瓣按鈕點(diǎn)擊事件

}elseif(btn.tag==1)?{

[_petalEmitterremoveFromSuperlayer];

_petalEmitter?=nil;

_petalEmitter?=?[[CAEmitterLayeralloc]init];

_petalEmitter.emitterPosition=?CGPointMake(0,0);

_petalEmitter.emitterSize=?CGSizeMake(mainW,1);

_petalEmitter.renderMode=?kCAEmitterLayerOldestLast;

_petalEmitter.emitterMode=?kCAEmitterLayerPoints;

_petalEmitter.emitterShape=?kCAEmitterLayerRectangle;

NSMutableArray*cellArray?=?[NSMutableArrayarray];

for(inti?=0;?i?<5;?i++)?{

CAEmitterCell*petal?=?[CAEmitterCellemitterCell];

petal.birthRate=0.5+0.2*?i;

petal.velocity=100;

petal.velocityRange=100;

petal.lifetime=10;

petal.spin=0.5;

petal.emissionLongitude=?-M_PI?-?M_PI_2;

petal.emissionRange=?M_PI_2;

NSString*str?=?[NSStringstringWithFormat:@"petal%d",?arc4random_uniform(5)];

petal.contents=?(__bridgeid)[[UIImageimageNamed:str]CGImage];

NSString*name?=?[NSStringstringWithFormat:@"petal%d",i];

petal.name=?name;

[cellArrayaddObject:petal];

}

_petalEmitter.emitterCells=?cellArray;

[self.view.layeraddSublayer:_petalEmitter];

//太陽按鈕點(diǎn)擊事件

}elseif(btn.tag==2)?{

[_sunEmitterremoveFromSuperlayer];

_sunEmitter?=nil;

_sunEmitter?=?[CAEmitterLayerlayer];

_sunEmitter.frame=self.view.bounds;

_sunEmitter.emitterPosition=?CGPointMake(0,0);

_sunEmitter.renderMode=?kCAEmitterLayerAdditive;

CAEmitterCell*sun?=?[[CAEmitterCellalloc]init];

sun.contents=?(__bridgeid)[UIImageimageNamed:@"petal4"].CGImage;

sun.birthRate=800;

sun.lifetime=2.0;

sun.color=?[UIColorcolorWithRed:1green:0.5blue:0.1alpha:1.0].CGColor;

sun.alphaSpeed=?-0.4;

sun.velocity=50;

sun.velocityRange=10;

sun.emissionRange=M_PI*2.0;

_sunEmitter.emitterCells=?@[sun];

[self.view.layeraddSublayer:_sunEmitter];

//停止按鈕點(diǎn)擊事件

}elseif(btn.tag==3)?{

[_noteEmitterremoveFromSuperlayer];

_noteEmitter?=nil;

[_petalEmitterremoveFromSuperlayer];

_petalEmitter?=nil;

[_sunEmitterremoveFromSuperlayer];

_sunEmitter?=nil;

}

}

@end

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赘风,隨后出現(xiàn)的幾起案子夹囚,更是在濱河造成了極大的恐慌,老刑警劉巖邀窃,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荸哟,死亡現(xiàn)場離奇詭異,居然都是意外死亡瞬捕,警方通過查閱死者的電腦和手機(jī)鞍历,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肪虎,“玉大人劣砍,你說我怎么就攤上這事∩染龋” “怎么了刑枝?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長迅腔。 經(jīng)常有香客問我装畅,道長,這世上最難降的妖魔是什么沧烈? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任洁灵,我火速辦了婚禮,結(jié)果婚禮上掺出,老公的妹妹穿的比我還像新娘徽千。我一直安慰自己,他們只是感情好汤锨,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布双抽。 她就那樣靜靜地躺著,像睡著了一般闲礼。 火紅的嫁衣襯著肌膚如雪牍汹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天柬泽,我揣著相機(jī)與錄音慎菲,去河邊找鬼。 笑死锨并,一個胖子當(dāng)著我的面吹牛露该,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播第煮,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼解幼,長吁一口氣:“原來是場噩夢啊……” “哼抑党!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起撵摆,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤底靠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后特铝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體暑中,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年鲫剿,在試婚紗的時候發(fā)現(xiàn)自己被綠了鳄逾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡牵素,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出澄者,到底是詐尸還是另有隱情笆呆,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布粱挡,位于F島的核電站赠幕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏询筏。R本人自食惡果不足惜榕堰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嫌套。 院中可真熱鬧逆屡,春花似錦、人聲如沸踱讨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痹筛。三九已至莺治,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間帚稠,已是汗流浹背谣旁。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留滋早,地道東北人榄审。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像杆麸,于是被迫代替她去往敵國和親瘟判。 傳聞我的和親對象是個殘疾皇子怨绣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評論 2 359

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