先看效果圖
snow.gif
rain.gif
煙花.gif
代碼:
下雪效果
self.backgroundColor = [UIColor blackColor];
// 創(chuàng)建粒子Layer
CAEmitterLayer *snowEmitter = [CAEmitterLayer layer];
// 粒子發(fā)射位置
snowEmitter.emitterPosition = CGPointMake(self.sizeWidth/2,20);
// 發(fā)射源的尺寸大小
snowEmitter.emitterSize = self.bounds.size;
// 發(fā)射模式
snowEmitter.emitterMode = kCAEmitterLayerSurface;
// 發(fā)射源的形狀
snowEmitter.emitterShape = kCAEmitterLayerLine;
// 創(chuàng)建雪花類型的粒子
CAEmitterCell *snowflake = [CAEmitterCell emitterCell];
// 粒子的名字
snowflake.name = @"snow";
// 粒子參數(shù)的速度乘數(shù)因子
snowflake.birthRate = 100.0; //每秒生成數(shù)量
snowflake.lifetime = 60; //生存時(shí)間
// 粒子速度
snowflake.velocity =10.0;
// 粒子的速度范圍
snowflake.velocityRange = 10;
// 粒子y方向的加速度分量
snowflake.yAcceleration = 8;
// 周圍發(fā)射角度
snowflake.emissionRange = 0.5 * M_PI;
// 子旋轉(zhuǎn)角度范圍
snowflake.spinRange = 0.25 * M_PI;
snowflake.contents = (id)[[UIImage imageNamed:@"snow"] CGImage];
// 設(shè)置雪花形狀的粒子的顏色
snowflake.color = [[UIColor whiteColor] CGColor];
//縮放范圍
snowflake.scaleRange = 0.3f;
snowflake.scale = 0.1f;
snowEmitter.shadowOpacity = 1.0;
snowEmitter.shadowRadius = 0.0;
snowEmitter.shadowOffset = CGSizeMake(0.0, 0.0);
// 粒子邊緣的顏色
snowEmitter.shadowColor = [[UIColor whiteColor] CGColor];
// 添加粒子
snowEmitter.emitterCells = @[snowflake];
// 將粒子Layer添加進(jìn)圖層中
[self.layer addSublayer:snowEmitter];
下雨效果:
self.backgroundColor =[UIColor whiteColor];
//發(fā)射器
CAEmitterLayer *rainEmitter =[CAEmitterLayer layer];
rainEmitter.emitterShape = kCAEmitterLayerLine;
rainEmitter.emitterMode = kCAEmitterLayerOutline;
rainEmitter.emitterSize = self.bounds.size;
rainEmitter.renderMode = kCAEmitterLayerAdditive;
rainEmitter.emitterPosition = CGPointMake(self.sizeWidth/2, 20);
//水滴
CAEmitterCell *rainflake = [CAEmitterCell emitterCell];
rainflake.birthRate = 50; //每秒發(fā)出的數(shù)量
//rainflake.speed = 10; //速度
rainflake.velocity = 300; //加速度
//rainflake.velocityRange = 75; //加速度范圍
rainflake.yAcceleration = 500; //重力
rainflake.contents = (id)[UIImage imageNamed:@"rain"].CGImage;
rainflake.color = [UIColor whiteColor].CGColor;
rainflake.lifetime = 2; //生命周期
rainflake.scale = 0.3; //縮放
rainflake.scaleRange = 0.2;
//水花
CAEmitterCell *rainSpark =[CAEmitterCell emitterCell];
rainSpark.birthRate = 1;
rainSpark.velocity = 0;
//rainSpark.emissionRange = M_PI;//180度
//rainSpark.yAcceleration = 40;
rainSpark.scale = 0.5;
rainSpark.contents = (id)[UIImage imageNamed:@"snow"].CGImage;
rainSpark.color=[UIColor whiteColor].CGColor;
rainSpark.lifetime = 0.3;
//
// and finally, the sparks
CAEmitterCell* spark = [CAEmitterCell emitterCell];
spark.birthRate = 50; //炸開后產(chǎn)生40花
spark.velocity = 50; //速度
spark.velocityRange = 20;
spark.emissionRange = M_PI; // 360 度
spark.yAcceleration = 40; // 重力
spark.lifetime = 0.5;
spark.contents = (id) [[UIImage imageNamed:@"snow"] CGImage];
spark.scaleSpeed = 0.2;
spark.scale = 0.2;
spark.color =[UIColor whiteColor].CGColor;
spark.alphaSpeed =- 0.25;
spark.spin = 2* M_PI;
spark.spinRange = 2* M_PI;
rainEmitter.emitterCells = @[rainflake];
rainflake.emitterCells = @[rainSpark];
rainSpark.emitterCells = @[spark];
[self.layer addSublayer:rainEmitter];
煙花效果
self.backgroundColor = [UIColor blackColor];
//cell產(chǎn)生在底部,向上移動(dòng)
CAEmitterLayer *fireworkdEmitter =[CAEmitterLayer layer];
CGRect viewBounds = self.layer.bounds;
fireworkdEmitter.emitterPosition =CGPointMake(viewBounds.size.width/2, viewBounds.size.height);
fireworkdEmitter.emitterMode = kCAEmitterLayerOutline;
fireworkdEmitter.emitterShape = kCAEmitterLayerLine;
fireworkdEmitter.renderMode = kCAEmitterLayerAdditive;
fireworkdEmitter.seed = (arc4random()%100)+1;
//創(chuàng)建火箭cell
CAEmitterCell *rocket = [CAEmitterCell emitterCell];
rocket.birthRate = 1;
rocket.emissionRange = 0.25 *M_PI;
rocket.velocity = 300;
rocket.velocityRange = 75;
rocket.lifetime =1.02;
rocket.contents = (id)[UIImage imageNamed:@"DazFire"].CGImage;
rocket.scale = 0.5;
rocket.scaleRange =0.5;
rocket.color = [UIColor redColor].CGColor;
rocket.greenRange = 1.0;
rocket.redRange = 1.0;
rocket.blueRange = 1.0;
rocket.spinRange =M_PI;
//破裂對(duì)象不能被看到,但會(huì)產(chǎn)生火花
//這里我們改變顏色,因?yàn)榛鸹ɡ^承它的值
CAEmitterCell *fireCell =[CAEmitterCell emitterCell];
fireCell.birthRate = 1;
fireCell.velocity = 0;
fireCell.scale = 1;
fireCell.redSpeed =- 1.5;
fireCell.blueSpeed =+ 1.5;
fireCell.greenSpeed =+ 1.5; // shifting
fireCell.lifetime = 0.34;
// and finally, the sparks
CAEmitterCell* spark = [CAEmitterCell emitterCell];
spark.birthRate = 400; //炸開后產(chǎn)生400個(gè)小煙花
spark.velocity = 125; //速度
spark.emissionRange = 2* M_PI; // 360 度
spark.yAcceleration = 40; // 重力
spark.lifetime = 3;
spark.contents = (id) [[UIImage imageNamed:@"snow"] CGImage];
spark.scaleSpeed =- 0.2;
spark.greenSpeed =- 0.1;
spark.redSpeed =+ 0.1;
spark.blueSpeed =- 0.1;
spark.alphaSpeed =- 0.25;
spark.spin = 2* M_PI;
spark.spinRange = 2* M_PI;
fireworkdEmitter.emitterCells = [NSArray arrayWithObject:rocket];
rocket.emitterCells = [NSArray arrayWithObject:fireCell];
fireCell.emitterCells = [NSArray arrayWithObject:spark];
[self.layer addSublayer:fireworkdEmitter];
Demo地址:https://github.com/yuying2012/WJDStudyLibrary
這是一個(gè)大工程,請(qǐng)從工程中尋找相關(guān)模塊代碼.