@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *likeBtn;
@property (nonatomic, strong) CAEmitterLayer *emitterLayer;
@end
//添加爆炸效果
- (void)explosion{
_emitterLayer = [CAEmitterLayer layer];
CAEmitterCell *cell = [[CAEmitterCell alloc] init];
cell.name = @"explosionCell";
cell.lifetime=.7;
cell.birthRate=4000;
cell.velocity=50;//中间值
cell.velocityRange = 15;//(50+-15)
cell.scale=.03;
cell.scaleRange=.02;
cell.contents = (id)[UIImage imageNamed:@"sparkle"].CGImage;
//设置粒子系统大小,位置,方向
_emitterLayer.name = @"explosionLayer";
_emitterLayer.emitterShape = kCAEmitterLayerCircle;
_emitterLayer.emitterMode = kCAEmitterLayerOutline;
_emitterLayer.emitterSize = CGSizeMake(25, 25);
_emitterLayer.emitterCells = @[cell];
_emitterLayer.renderMode = kCAEmitterLayerOldestFirst;
_emitterLayer.masksToBounds = NO;
_emitterLayer.birthRate = 0;
_emitterLayer.position = CGPointMake(CGRectGetWidth(_likeBtn.bounds)/2, CGRectGetHeight(_likeBtn.bounds)/2);
[_likeBtn.layer addSublayer:_emitterLayer];
- (void)clickAction:(UIButton*)sender {
sender.selected= !sender.selected;
//关键帧动画
CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
if(sender.selected) {
anim.values=@[@3,@.8, @1,@1.2, @1];
anim.duration=.6;
[self addExplosionAnim];
}else{
anim.values=@[@.8,@1.0];
anim.duration=.4;
}
[_likeBtn.layer addAnimation:anim forKey:nil];
}
- (void)addExplosionAnim{
_emitterLayer.beginTime = CACurrentMediaTime();
_emitterLayer.birthRate = 1;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.15 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
_emitterLayer.birthRate = 0;
});
}