类似于支付宝咻一咻功能的动画效果
1、用到的几个类
CADisplayLink:可以实现不停的重绘 默认为每秒运行60次
CAAnimationGroup:
CAMediaTimingFunction:
(1)创建CADisplayLink对象,重绘界面
_animationLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(animationStart:)];
_animationLink.frameInterval = 40;
[_animationLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
(2)动画设置
-(void)startDisplayLink
{
//创建一个图层
CALayer *layer = [CALayer layer];
//设置圆角度
layer.cornerRadius = [UIScreen mainScreen].bounds.size.width * 0.5;
//图层大小
layer.frame = CGRectMake(0, 0, layer.cornerRadius * 2, layer.cornerRadius * 2);
//图层的位置
layer.position = self.view.layer.position;
//设置颜色
UIColor *randomColor = [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1];
//设置涂成颜色
layer.backgroundColor = randomColor.CGColor;
//将图层添加在view的图层上
[self.view.layer addSublayer:layer];
//设置动画快慢
CAMediaTimingFunction *defaultCurve = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
//动画组
_animationGroup = [CAAnimationGroup animation];
_animationGroup.delegate = self;
_animationGroup.duration = 2.0;
_animationGroup.removedOnCompletion = YES; //完成后移除图层
_animationGroup.timingFunction = defaultCurve;
//动画
CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale.xy"];
scaleAnimation.fromValue = @0.0;
scaleAnimation.toValue = @1.0;
scaleAnimation.duration = 2.0;
//关键 动画
CAKeyframeAnimation *opacityAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
opacityAnimation.duration = 2.0;
opacityAnimation.values = @[@0.8,@0.4,@0];
opacityAnimation.keyTimes = @[@0,@0.5,@1];
opacityAnimation.removedOnCompletion = YES;
NSArray *animations = @[scaleAnimation,opacityAnimation];
_animationGroup.animations = animations;
[layer addAnimation:_animationGroup forKey:nil];
{
//创建一个图层
CALayer *layer = [CALayer layer];
//设置圆角度
layer.cornerRadius = [UIScreen mainScreen].bounds.size.width * 0.5;
//图层大小
layer.frame = CGRectMake(0, 0, layer.cornerRadius * 2, layer.cornerRadius * 2);
//图层的位置
layer.position = self.view.layer.position;
//设置颜色
UIColor *randomColor = [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1];
//设置涂成颜色
layer.backgroundColor = randomColor.CGColor;
//将图层添加在view的图层上
[self.view.layer addSublayer:layer];
//设置动画快慢
CAMediaTimingFunction *defaultCurve = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
//动画组
_animationGroup = [CAAnimationGroup animation];
_animationGroup.delegate = self;
_animationGroup.duration = 2.0;
_animationGroup.removedOnCompletion = YES; //完成后移除图层
_animationGroup.timingFunction = defaultCurve;
//动画
CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale.xy"];
scaleAnimation.fromValue = @0.0;
scaleAnimation.toValue = @1.0;
scaleAnimation.duration = 2.0;
//关键 动画
CAKeyframeAnimation *opacityAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
opacityAnimation.duration = 2.0;
opacityAnimation.values = @[@0.8,@0.4,@0];
opacityAnimation.keyTimes = @[@0,@0.5,@1];
opacityAnimation.removedOnCompletion = YES;
NSArray *animations = @[scaleAnimation,opacityAnimation];
_animationGroup.animations = animations;
[layer addAnimation:_animationGroup forKey:nil];
[self performSelector:@selector(removeLayer:) withObject:layer afterDelay:1.5];
}
-(void)removeLayer:(CALayer *)layer
{
[layer removeFromSuperlayer];
{
[layer removeFromSuperlayer];
}
//移除停止并置空
[self.view.layer removeAllAnimations];
[_animationLink invalidate];
_animationLink = nil;