參考博文地址:http://my.oschina.net/u/2340880/blog/485095?fromerr=bgjLq4Mw
一、粒子發射器
iOS中的粒子效果有兩部分組成,一部分為發射器,設置例子發射的宏觀屬性,另一部分是粒子單元,用于設置相應的粒子屬性。粒子發射器是基于Layer層,他的全名叫做:CAEmitterLayer。其中常用的屬性如下:
@property(copy)?NSArray?*emitterCells;
粒子單元數組,例如你在繪制火焰的效果時,你可以創建兩個單元,一個單元負責煙霧,一個單元負責火苗。
@property?float?birthRate;
粒子的創建速率,默認為1/s。
@property?float?lifetime;
粒子的存活時間。默認為1S。
@property?CGPoint?emitterPosition;
發射器在xy平面的中心位置
@property?CGFloat?emitterZPosition;
發射器在Z平面的位置
@property?CGSize?emitterSize;
發射器的尺寸大小
@property?CGFloat?emitterDepth;
發射器的深度,在某些模式下會產生立體效果
@property(copy)?NSString?*emitterShape;
發射器的形狀,這個參數的幾個系統字符串如下:
@property(copy)?NSString?*emitterMode;
發射器的發射模式,參數如下:
@property(copy)?NSString?*renderMode;
發射器渲染模式,參數如下:
@property?BOOL?preservesDepth;
是否開啟三維空間效果
@property?float?velocity;
粒子的運動速度
@property?float?scale;
粒子的縮放大小
@property?float?spin;
粒子的旋轉位置
@property?unsigned?int?seed;
初始化隨機的粒子種子
二、粒子單元
設置好了粒子發射器,我們還需要初始化一些粒子單元,設置具體粒子的屬性,我們使用到的類是CAEmitterCell這個類。
+ (instancetype)emitterCell;
類方法創建發射單元
@property(copy)?NSString?*name;
設置發射單元的名稱
@property(getter=isEnabled)?BOOL?enabled;
是否允許發射器渲染
@property?float?birthRate;
粒子的創建速率
@property?float?lifetime;
粒子的生存時間
@property?float?lifetimeRange;
粒子的生存時間容差
@property?CGFloat?emissionLatitude;
粒子在Z軸方向的發射角度
@property?CGFloat?emissionLongitude;
粒子在xy平面的發射角度
@property?CGFloat?emissionRange;
粒子發射角度的容差
@property?CGFloat?velocity;
粒子的速度
@property?CGFloat?velocityRange;
粒子速度的容差
@property?CGFloat?xAcceleration;
@property?CGFloat?yAcceleration;
@property?CGFloat?zAcceleration;
x,y,z三個方向的加速度
@property?CGFloat?scale;
@property?CGFloat?scaleRange;
@property?CGFloat?scaleSpeed;
縮放大小,縮放容差和縮放速度
@property?CGFloat?spin;
@property?CGFloat?spinRange;
旋轉度與旋轉容差
@property?CGColorRef?color;
粒子的顏色
@property?float?redRange;
@property?float?greenRange;
@property?float?blueRange;
@property?float?alphaRange;
粒子在rgb三個色相上的容差和透明度的容差
@property?float?redSpeed;
@property?float?greenSpeed;
@property?float?blueSpeed;
@property?float?alphaSpeed;
粒子在RGB三個色相上的變化速度和透明度的變化速度
@property(strong)?id?contents;
渲染粒子,可以設置為一個CGImage的對象
@property?CGRect?contentsRect;
渲染的范圍
三、噴射彩帶的效果Demo
- (void)startAnimation
{//設置發射器
_streamerEmitter=[[CAEmitterLayer alloc]init];
_streamerEmitter.emitterPosition=CGPointMake(self.view.frame.size.width/2,self.view.frame.size.height/2);
_streamerEmitter.emitterSize=CGSizeMake(self.view.frame.size.width-100, 20);
_streamerEmitter.renderMode=kCAEmitterLayerAdditive;
_streamerEmitter.preservesDepth=YES;//發射單元//彩帶
CAEmitterCell * smoke =[CAEmitterCell emitterCell];
smoke.birthRate=100;
smoke.lifetime=3.0;
smoke.lifetimeRange=1;
smoke.scale= 0.5;
smoke.scaleRange= 0.5;
smoke.color=[UIColor colorWithRed:0 green:1 blue:0 alpha:0.2].CGColor;
smoke.alphaRange= 1;
smoke.redRange=255;
smoke.blueRange= 22;
smoke.greenRange= 1.5;
smoke.contents=(id)[[UIImage imageNamed:@"彩花.png"]CGImage];
[smoke setName:@"smoke"];
smoke.velocity=200;
smoke.velocityRange=50;
smoke.emissionLongitude=M_PI+M_PI_2;
smoke.emissionRange=M_PI_2;
smoke.spin=M_PI_2;
smoke.spinRange=M_PI_2;
_streamerEmitter.emitterCells=[NSArray arrayWithObjects:smoke,nil];
[self.myView.layer addSublayer:_streamerEmitter];
}
Demo下載地址:?https://github.com/KrystalNa/streamDemo