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í)候就不用到處找了饭庞,謝謝大神的分享!