zoukankan      html  css  js  c++  java
  • 通过布赛尔曲线以及CAShapeLayer的strokeStart 、strokeEnd 属性来实现一个圆形进度条

    #import <UIKit/UIKit.h>
    
    @interface CircleProgressView : UIView
    
    /**起始值(0-1)*/
    @property(nonatomic,assign)CGFloat fstartValue;
    
    /**边框宽度*/
    @property(nonatomic,assign)CGFloat flineWidth;
    
    /**线条颜色*/
    @property(nonatomic,strong)UIColor *lineColor;
    
    /**变化的值*/
    @property(nonatomic,assign)CGFloat fvalue;
    @end
    #import "CircleProgressView.h"
    @interface CircleProgressView ()
    {
        CAShapeLayer *_shapeLayer;
    }
    @end
    @implementation CircleProgressView
    @synthesize fstartValue=_fstartValue;
    @synthesize flineWidth=_flineWidth;
    @synthesize lineColor=_lineColor;
    @synthesize fvalue=_fvalue;
    
    
    - (instancetype)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self)
        {
            /**创建带形状的图层*/
            _shapeLayer=[CAShapeLayer layer];
            _shapeLayer.frame     = self.bounds;
            _shapeLayer.strokeEnd = 0.f;
            
            /*创建布赛尔曲线*/
            UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:self.bounds];
            
            /**把图层和不塞尔曲线通过path进行关联*/
            _shapeLayer.path   = path.CGPath;
            
            /**设置图层的填充颜色、宽度、边框颜色*/
            _shapeLayer.fillColor   = [UIColor clearColor].CGColor;
            _shapeLayer.lineWidth   = 1.0f;
            _shapeLayer.strokeColor = [UIColor redColor].CGColor;
            
            [self.layer addSublayer:_shapeLayer];
        }
        return self;
    }
    /**
     *  @brief  重写fstartValue的setter方法
     *  @param fstartValue  设置圆形strokeStart起始值
     *  @since
     */
    - (void)setFstartValue:(CGFloat)fstartValue
    {
        _fstartValue          = fstartValue;
        _shapeLayer.strokeStart = fstartValue;
        
    }
    - (CGFloat)fstartValue
    {
        return _fstartValue;
    }
    /**
     *  @brief  重写flineWidth的setter方法
     *  @param flineWidth  设置圆形边框宽度
     *  @since
     */
    
    - (void)setFlineWidth:(CGFloat)flineWidth
    {
        _flineWidth           = flineWidth;
        _shapeLayer.lineWidth = flineWidth;
    }
    /**
     *  @brief  重写lineColor的setter方法
     *  @param lineColor  设置圆形边框颜色
     *  @since
     */
    
    - (void)setLineColor:(UIColor *)lineColor
    {
        _lineColor              = lineColor;
        _shapeLayer.strokeColor = lineColor.CGColor;
    }
    - (UIColor *)lineColor
    {
        return _lineColor;
    }
    /**
     *  @brief  重写fvalue的setter方法
     *  @param lineColor  设置圆形的strokeEnd值
     *  @since
     */
    - (void)setFvalue:(CGFloat)fvalue
    {
        _fvalue                = fvalue;
        _shapeLayer.strokeEnd = fvalue;
    }
    
    - (CGFloat)fvalue
    {
        return _fvalue;
    }
    @end
    #import "ViewController.h"
    #import "CircleProgressView.h"
    @interface ViewController ()
    {
        CircleProgressView *progress;
    }
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        progress             = [[CircleProgressView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];
        progress.center      = self.view.center;
        progress.lineColor   = [UIColor redColor];
        progress.flineWidth  = 1.0f;
        progress.fstartValue = 0;
        [self.view addSubview:progress];
        [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(circleAnimation) userInfo:nil repeats:YES];
        
    }
    - (void)circleAnimation
    {
        progress.fvalue = arc4random()%100/100.f;
    }
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
       
    }
    
    @end

  • 相关阅读:
    Java内存模型
    BigDecimal踩过的大坑
    Java开发小技巧
    多线程同步辅助工具类
    ReentrantLock中的公平锁与非公平锁
    ReentrantLock与synchronized的区别
    推荐一个Java设计模式写的很好的博客
    线程池ThreadPoolExecutor工作原理
    支付系统架构设计转载
    linux 部署脚本
  • 原文地址:https://www.cnblogs.com/thbbsky/p/4383978.html
Copyright © 2011-2022 走看看