圓形進度條

#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
相關文章
相關標籤/搜索