当前位置: 代码迷 >> Iphone >> 透过布赛尔曲线以及CAShapeLayer的strokeStart 、strokeEnd 属性来实现一个圆形进度条
  详细解决方案

透过布赛尔曲线以及CAShapeLayer的strokeStart 、strokeEnd 属性来实现一个圆形进度条

热度:33   发布时间:2016-04-25 05:42:28.0
通过布赛尔曲线以及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