https://github.com/imwcl/WclEmitterButton
.h
//兩種不同的CAEmitterLayer
@property (strong, nonatomic) CAEmitterLayer *explosionLayer;
/**
* 開始噴射
*/
- (void)startAnimate;
/**
* 停止噴射
*/
- (void)stop;
- (void)destroy;
.m
/*
CAKeyframeAnimation // 核心動畫-關(guān)鍵幀動畫
CAEmitterLayer // 粒子發(fā)射器(其實就是一個Layer,其父類是CALayer)
CAEmitterCell // 粒子
PS:核心動畫應該不用多說了;
CAEmitterLayer和CAEmitterCell惨篱,其實可以比喻成“炮”和“炮彈”,應該不難理解;
*/
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
/**
* 配置WclEmitterButton
*/
- (void)setup {
//參數(shù)詳情請見博客詳解:http://blog.csdn.net/wang631106979/article/details/51258020
CAEmitterCell *explosionCell = [CAEmitterCell emitterCell];
explosionCell.name = @"explosion";
explosionCell.alphaRange = 0.50;// 一個粒子的顏色alpha能改變的范圍
explosionCell.alphaSpeed = -0.7;// 粒子透明度在生命周期內(nèi)的改變速度
explosionCell.lifetime = 5;// 生命周期
explosionCell.lifetimeRange = 1;// 生命周期范圍 lifetime= lifetime(+/-) lifetimeRange
explosionCell.birthRate = 0;// 每秒發(fā)射的粒子數(shù)量
explosionCell.velocity = 10.00;// 速度
explosionCell.velocityRange = 1500.00;// 速度范圍
explosionCell.scale = 0.8;// 縮放比例
explosionCell.scaleRange = 0.4;// 縮放比例范圍
explosionCell.contents = (id)[UIImage imageNamed:@"scene_finish_fly_star.png"].CGImage;// 是個CGImageRef的對象,既粒子要展現(xiàn)的圖片
_explosionLayer = [CAEmitterLayer layer];
_explosionLayer.name = @"emitterLayer";
_explosionLayer.emitterShape = kCAEmitterLayerCircle;// 發(fā)射源的形狀
_explosionLayer.emitterMode = kCAEmitterLayerOutline;// 渲染模式
_explosionLayer.emitterSize = CGSizeMake(30, 0);// 發(fā)射源的大小
_explosionLayer.emitterCells = @[explosionCell];// 粒子發(fā)射的粒子的數(shù)組
_explosionLayer.renderMode = kCAEmitterLayerOldestFirst;// 渲染模式
_explosionLayer.masksToBounds = NO;// 是否圓角
_explosionLayer.position = CGPointMake(self.frame.size.width/2.0, self.frame.size.height/2.0);// 位置
_explosionLayer.zPosition = -1; // z軸位置
[self.layer addSublayer:_explosionLayer];
}
/**
* 開始噴射
*/
- (void)startAnimate {
//explosionLayer開始時間
self.explosionLayer.beginTime = CACurrentMediaTime();
//explosionLayer每秒噴射的個數(shù)
[self.explosionLayer setValue:@40 forKeyPath:@"emitterCells.explosion.birthRate"];
}
/**
* 停止噴射
*/
- (void)stop {
//explosionLayer每秒噴射的0個
[self.explosionLayer setValue:@0 forKeyPath:@"emitterCells.explosion.birthRate"];
}
- (void)destroy {
[self stop];
}