-
效果图
- 实现代码
CALayer * spreadLayer;
spreadLayer = [CALayer layer];
CGFloat diameter = 160; //扩散的大小
spreadLayer.bounds = CGRectMake(0,0, diameter, diameter);
spreadLayer.cornerRadius = diameter/2; //设置圆角变为圆形
spreadLayer.position = self.scanCodeBtn.center;
spreadLayer.backgroundColor = COLOR_GREEN.CGColor;
// 把扩散层放到按钮下面
[self.layer insertSublayer:spreadLayer below:self.scanCodeBtn.layer];
CAMediaTimingFunction * defaultCurve = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
CAAnimationGroup * animationGroup = [CAAnimationGroup animation];
animationGroup.duration = 2.5;//1.75
animationGroup.repeatCount = INFINITY;//重复无限次
animationGroup.removedOnCompletion = NO;
animationGroup.timingFunction = defaultCurve;
//尺寸比例动画
CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale.xy"];
scaleAnimation.fromValue = @0.5;//开始的大小
scaleAnimation.toValue = @1.0;//最后的大小
scaleAnimation.duration = 1.5;//动画持续时间
//透明度动画
CAKeyframeAnimation *opacityAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
opacityAnimation.duration = 2.5;
opacityAnimation.values = @[@1, @0.5,@0];//透明度值的设置
// opacityAnimation.values = @[@1, @0.67,@0.33];//透明度值的设置
opacityAnimation.keyTimes = @[@0, @0.5,@1.0];//关键帧
// opacityAnimation.keyTimes = @[@0, @0.33,@0.67];//关键帧
opacityAnimation.removedOnCompletion = NO;
animationGroup.animations = @[scaleAnimation, opacityAnimation];//添加到动画组
[spreadLayer addAnimation:animationGroup forKey:@"pulse"];