美文网首页
CAShapeLayer入门之实现圆形LoadingView ⭕

CAShapeLayer入门之实现圆形LoadingView ⭕

作者: 专家搬运工 | 来源:发表于2018-01-08 17:52 被阅读35次

    效果

    loading.gif

    代码

    //
    //  LoadingView.m
    //  LoadingView
    //
    //  Created by zhiyunyu on 2018/1/8.
    //  Copyright © 2018年 zhiyunyu. All rights reserved.
    //
    
    #import "LoadingView.h"
    
    static CGFloat const kQNRadius = 25.f;
    static CGFloat const kQNLineWidth = 1.0;
    
    @interface LoadingView ()
    
    @property(nonatomic, strong) CAShapeLayer *circleLayer;
    
    @end
    
    @implementation LoadingView
    
    - (instancetype)initWithFrame:(CGRect)frame {
        if (self = [super initWithFrame:frame]) {
            [self p_addCircleAnimations];
        }
        return self;
    }
    
    - (void)p_addCircleAnimations {
        if (self.circleLayer) {
            [self.circleLayer removeFromSuperlayer];
            self.circleLayer = nil;
        }
        CAShapeLayer *circle = [CAShapeLayer layer];
        circle.bounds = self.bounds;
        circle.position = CGPointMake(self.bounds.size.width / 2, self.bounds.size.height / 2);
        
        UIBezierPath *circlePath = [UIBezierPath bezierPathWithArcCenter:circle.position
                                                                  radius:(kQNRadius)
                                                              startAngle:0
                                                                endAngle:2 * M_PI
                                                               clockwise:YES];
        circle.path = circlePath.CGPath;
        circle.strokeColor = [UIColor redColor].CGColor;
        circle.lineWidth = kQNLineWidth;
        circle.fillColor = [UIColor clearColor].CGColor;
        self.circleLayer = circle;
        //修改strokeEnd的值,因此形成动画
        CABasicAnimation *strokeEndAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
        strokeEndAnimation.duration = 5.0f;
        strokeEndAnimation.fromValue = @(0.f);
        strokeEndAnimation.toValue = @(1);
        [self.circleLayer addAnimation:strokeEndAnimation forKey:nil];
        [self.layer addSublayer:self.circleLayer];
    }
    
    @end
    
    

    相关文章

      网友评论

          本文标题:CAShapeLayer入门之实现圆形LoadingView ⭕

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