通过布赛尔曲线以及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

你可能感兴趣的:(shape)