美文网首页iOS常用JS交互
iOS 实现支付宝支付动画 下

iOS 实现支付宝支付动画 下

作者: 孟宪亮 | 来源:发表于2020-11-18 09:11 被阅读0次

    上一篇博客分析了支付中动画的实现,本篇博客是分析支付完成的动画。

    支付宝支付动画

    一、动画解析

    为了方便观察,放慢了动画的速度,并添加辅助线:


    原理分析

    通过上图可知,支付完成的动画由两部分组成:圆环动画 + 对号动画

    二、代码实现

    1、圆环动画

    这个动画比较简单,是利用贝塞尔曲线画弧的功能。再利用CAShapeLayer的strokeEnd属性加上核心动画实现的圆环动画。

    -(void)circleAnimation{
        
        //显示图层
        CAShapeLayer *circleLayer = [CAShapeLayer layer];
        circleLayer.frame = _animationLayer.bounds;
        [_animationLayer addSublayer:circleLayer];
        circleLayer.fillColor =  [[UIColor clearColor] CGColor];
        circleLayer.strokeColor  = BlueColor.CGColor;
        circleLayer.lineWidth = lineWidth;
        circleLayer.lineCap = kCALineCapRound;
        
        //运动路径
        CGFloat lineWidth = 5.0f;
        CGFloat radius = _animationLayer.bounds.size.width/2.0f - lineWidth/2.0f;
        UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:circleLayer.position radius:radius startAngle:-M_PI/2 endAngle:M_PI*3/2 clockwise:true];
        circleLayer.path = path.CGPath;
        
        //执行动画
        CABasicAnimation *checkAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
        checkAnimation.duration = circleDuriation;
        checkAnimation.fromValue = @(0.0f);
        checkAnimation.toValue = @(1.0f);
        checkAnimation.delegate = self;
        [checkAnimation setValue:@"checkAnimation" forKey:@"animationName"];
        [circleLayer addAnimation:checkAnimation forKey:nil];
    }
    

    2、对号动画

    对号动画是利用了贝塞尔曲线的画线特性,设置了两段曲线拼接成了一个对号。如上图所示对号由线段AB和线段BC拼接完成,然后再利用核心动画和CAShapeLayer的strokeEnd属性实现对号动画。

    -(void)checkAnimation{
        
        //外切圆的边长
        CGFloat a = _animationLayer.bounds.size.width;
        //设置三个点 A、B、C
        UIBezierPath *path = [UIBezierPath bezierPath];
        [path moveToPoint:CGPointMake(a*2.7/10,a*5.4/10)];
        [path addLineToPoint:CGPointMake(a*4.5/10,a*7/10)];
        [path addLineToPoint:CGPointMake(a*7.8/10,a*3.8/10)];
        
        //显示图层
        CAShapeLayer *checkLayer = [CAShapeLayer layer];
        checkLayer.path = path.CGPath;
        checkLayer.fillColor = [UIColor clearColor].CGColor;
        checkLayer.strokeColor = BlueColor.CGColor;
        checkLayer.lineWidth = lineWidth;
        checkLayer.lineCap = kCALineCapRound;
        checkLayer.lineJoin = kCALineJoinRound;
        [_animationLayer addSublayer:checkLayer];
        
        //执行动画
        CABasicAnimation *checkAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
        checkAnimation.duration = checkDuration;
        checkAnimation.fromValue = @(0.0f);
        checkAnimation.toValue = @(1.0f);
        checkAnimation.delegate = self;
        [checkAnimation setValue:@"checkAnimation" forKey:@"animationName"];
        [checkLayer addAnimation:checkAnimation forKey:nil];
    }
    

    Github

    相关文章

      网友评论

        本文标题:iOS 实现支付宝支付动画 下

        本文链接:https://www.haomeiwen.com/subject/rmmqiktx.html