CAEmitterLayer是一个高性能的粒子引擎 是用来创建实时粒子动画, 比如:下雪 烟雾 火爆炸等
例如:点赞扩散的粒子效果
//点赞效果
self.emitter = [[CAEmitterLayer alloc] init];
[self.btn.layer addSublayer:self.emitter];
//发射源的形状
self.emitter.emitterShape = kCAEmitterLayerCircle;
//发射的形状(向外发射)
self.emitter.emitterMode = kCAEmitterLayerOutline;
//发着源的大小
self.emitter.emitterSize = CGSizeMake(10, 0);
//发着源的位置 按钮的中心位置
self.emitter.emitterPosition = CGPointMake(self.btn.frame.size.width/2, self.btn.frame.size.height/2);
self.emitter.birthRate = 0;//不开始动画(生成数量为0)
CAEmitterCell *cell = [[CAEmitterCell alloc] init];//创建cell()
//设置图片
cell.contents = (id)[UIImage imageNamed:@"sparkle.png"].CGImage;
//设置粒子存活时间 秒为单位
cell.lifetime = 0.5;
//设置粒子存活时间的范围 (不设置这个只存活1s 设置0.5 存活时间是0.5-1s 之间)
cell.lifetimeRange = 0.1;
//设置粒子的速度
cell.velocity = 40;
cell.velocityRange = 10; // 范围是由粒子的速度 和存活时间决定
//粒子数量(每秒产生的数量)
cell.birthRate = 2500;
// 粒子透明度 每秒透明度减少0.4
cell.alphaSpeed = -0.4;
// 设置粒子颜色alpha能改变的范围(设置0.1 每秒粒子的透明度减少 0.1-1)
cell.alphaRange = 0.10;
//缩放图片
cell.scale = 0.05;
//缩放范围
cell.scaleRange = 0.02;
self.emitter.emitterCells = @[cell];
按钮的点击事件
//开始 清除之前的粒子 (从现在开始生成)
self.emitter.beginTime = CACurrentMediaTime();
self.emitter.birthRate = 1;
[self performSelector:@selector(stopAction) withObject:nil afterDelay:0.1];
- (void)stopAction {
self.emitter.birthRate = 0;
}