CAEmitterLayer可以來制作粒子發(fā)射系統(tǒng),主要包含兩個(gè)部分CAEmitterLayer和CAEmitterCell。
CAEmitterLayer就是粒子發(fā)射器,決定粒子發(fā)射器的形狀,位置,大小等;CAEmitterCell可以設(shè)置粒子的屬性,包括形狀,大小,速度,加速度,存活時(shí)間等。
CAEmitterLayer的常用屬性:
emitterCellsCAEmitterCell對(duì)象的數(shù)組
birthRate粒子產(chǎn)生系數(shù),默認(rèn)為1.0;CAEmitterLayer也有birthRate屬性,系統(tǒng)每秒實(shí)際產(chǎn)生的粒子數(shù)是這兩個(gè)屬性值的乘積
lifetime粒子存活時(shí)間,默認(rèn)1s
emitterPosition發(fā)射器xy坐標(biāo)軸上的位置
emitterZPosition發(fā)射器在z坐標(biāo)軸上的位置
preservesDepth是否開啟三維效果
velocity粒子運(yùn)動(dòng)速度
scale粒子縮放效果
spin粒子自旋轉(zhuǎn)速度
seed隨機(jī)數(shù)發(fā)生器
emitterSize發(fā)射器尺寸
emitterDepth發(fā)射器深度
emitterShape發(fā)射器形狀
????kCAEmitterLayerPoint 點(diǎn)狀
????kCAEmitterLayerLine 線狀
????kCAEmitterLayerRectangle 矩形
????kCAEmitterLayerCuboid 立方體
????kCAEmitterLayerCircle 圓形
????kCAEmitterLayerSphere 球形
emitterMode發(fā)射模式
????kCAEmitterLayerPoints 從頂點(diǎn)發(fā)出
????kCAEmitterLayerOutline 從邊緣發(fā)出
????kCAEmitterLayerSurface 從表面發(fā)出
????kCAEmitterLayerVolume 從立方體中發(fā)出
renderMode渲染模式
????kCAEmitterLayerUnordered 粒子無序出現(xiàn)
????kCAEmitterLayerOldestFirst 先聲明的粒子在上層
????kCAEmitterLayerOldestLast 后聲明的粒子在上層
????kCAEmitterLayerBackToFront 在z軸上從后到前渲染
????kCAEmitterLayerAdditive 混合粒子
CAEmitterCell常用屬性:
emitterCell初始化方法
name粒子名字
color粒子顏色
enabled粒子是否可渲染
contents粒子內(nèi)容
contentsRect渲染范圍
birthRate粒子產(chǎn)生速度
lifetime生命周期
lifetimeRange生命周期浮動(dòng)范圍
velocity粒子初始運(yùn)動(dòng)速度
velocityRange粒子速度浮動(dòng)范圍
spin粒子旋轉(zhuǎn)角度
spinrange粒子旋轉(zhuǎn)角度范圍
scale粒子縮放比例
scaleRange粒子縮放比例范圍
scaleSpeed粒子縮放速度
alphaRange粒子透明度變化范圍
alphaSpeed粒子透明度變化速度
redRange粒子顏色紅色的變化范圍
redSpeed粒子顏色紅色的變化速度
blueRange粒子顏色藍(lán)色的變化范圍
blueSpeed粒子顏色藍(lán)色的變化速度
greenRange粒子顏色綠色的變化范圍
greenSpeed粒子顏色綠色的變化速度
xAccelerationx軸方向的加速度分量
yAccelerationy軸方向的加速度分量
zAccelerationz軸方向的加速度分量
emissionRange粒子發(fā)射角度范圍
emissionLongitude粒子在xy平面的發(fā)射角度
emissionLatitude粒子在z軸方向的發(fā)射角度
使用CAEmitterLayer做一個(gè)從禮物盒里拋出來禮物的樣式:
//添加一個(gè)禮物盒
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(self.view.bounds.size.width/2-10, 600, 50, 50)];
imgView.image = [UIImage imageNamed:@"禮物盒"];
[self.view addSubview:imgView];
//1.創(chuàng)建一個(gè)發(fā)射器
CAEmitterLayer *emitterLayer = [CAEmitterLayer layer];
emitterLayer.emitterPosition = CGPointMake(self.view.bounds.size.width/2, 600);
emitterLayer.emitterShape = kCAEmitterLayerLine;
emitterLayer.emitterMode = kCAEmitterLayerSurface;
emitterLayer.emitterSize = CGSizeMake(20, 5);
//2.創(chuàng)建發(fā)射的粒子
NSMutableArray *cellsArray = [NSMutableArray array];
for (int i = 1; i<5; i++) {
CAEmitterCell *emitterCell = [CAEmitterCell emitterCell];
emitterCell.birthRate = 0.5+0.1*i;
emitterCell.speed = 1.5;
emitterCell.velocity = 150;
emitterCell.velocityRange = 30;
emitterCell.lifetime = 3.5;
emitterCell.lifetimeRange = 0.5;
emitterCell.spin = 1;
emitterCell.scale = 0.8;
emitterCell.scaleRange = 0.5;
emitterCell.emissionLongitude = 0;
emitterCell.emissionRange = M_PI_4;
emitterCell.yAcceleration = 120;
emitterCell.contents = (id)[UIImage imageNamed:[NSString stringWithFormat:@"icon0%d", i]].CGImage;
[cellsArray addObject:emitterCell];
}
emitterLayer.emitterCells = cellsArray;
[self.view.layer addSublayer:emitterLayer];

創(chuàng)建一個(gè)點(diǎn)贊按鈕的動(dòng)畫效果
CAEmitterCell *emitterCell = [CAEmitterCell emitterCell];
emitterCell.name = @"emitter";
emitterCell.alphaRange = 0.10;
emitterCell.alphaSpeed = -1.0;
emitterCell.lifetime = 0.3;
emitterCell.lifetimeRange = 0.1;
emitterCell.birthRate = 0;
emitterCell.velocity = 40.0;
emitterCell.velocityRange = 0.00;
emitterCell.scale = 0.3;
emitterCell.scaleRange = 0.1;
emitterCell.contents = (id)[UIImage imageNamed:@"點(diǎn)"].CGImage;
self.emitterLayer = [CAEmitterLayer layer];
self.emitterLayer.name = @"emitterLayer";
self.emitterLayer.emitterShape = kCAEmitterLayerCircle;
self.emitterLayer.emitterMode = kCAEmitterLayerOutline;
self.emitterLayer.emitterSize = CGSizeMake(20, 0);
self.emitterLayer.emitterCells = @[emitterCell];
self.emitterLayer.renderMode = kCAEmitterLayerOldestFirst;
self.emitterLayer.masksToBounds = NO;
self.emitterLayer.position = likeBtn.center;
self.emitterLayer.zPosition = -1;
[self.view.layer addSublayer:self.emitterLayer];
//處理按鈕點(diǎn)擊
- (void)handleLikeOrNotLike:(UIButton *)button {
button.selected = !button.selected;
if (button.selected) {
self.emitterLayer.beginTime = CACurrentMediaTime();
//每秒噴射粒子的個(gè)數(shù)為80個(gè)
[self.emitterLayer setValue:@1000 forKeyPath:@"emitterCells.emitter.birthRate"];
[self performSelector:@selector(explode) withObject:nil afterDelay:0.1];
}
[button setImage:[UIImage imageNamed:@"點(diǎn)贊"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"點(diǎn)贊-2"] forState:UIControlStateSelected];
}
//大量噴射
- (void)explode {
//每秒噴射的個(gè)數(shù)為2500個(gè)
[self.emitterLayer setValue:@2500 forKeyPath:@"emitterCells.emitter.birthRate"];
[self performSelector:@selector(stop) withObject:nil afterDelay:0.1];
}
//停止噴射
- (void)stop {
//每秒噴射粒子的個(gè)數(shù)為0個(gè)
[self.emitterLayer setValue:@0 forKeyPath:@"emitterCells.emitter.birthRate"];
}

參考鏈接:
http://blog.csdn.net/hero_wqb/article/details/50539444
http://blog.csdn.net/wang631106979/article/details/51258020