創(chuàng)建一個(gè)circleView,以后要用到環(huán)形進(jìn)度條實(shí)例化之就可以
#import"cycleView.h"
@implementationcycleView
- (void)drawRect:(CGRect)rect
{
//使用CAShapeLayer繪制出漸變層,因?yàn)樗荒苤付▋蓚€(gè)點(diǎn)之間進(jìn)行漸變,所以這里需要兩個(gè)CAShapeLayer,左右各一個(gè)
//生成漸變色
CALayer*gradientLayer = [CALayerlayer];
//左側(cè)漸變色
CAGradientLayer*leftLayer = [CAGradientLayerlayer];
leftLayer.frame=CGRectMake(0,0,self.bounds.size.width/2,self.bounds.size.height);
//分段設(shè)置漸變色
leftLayer.locations=@[@0.3,@0.9,@1];
leftLayer.colors=@[(id)[UIColoryellowColor].CGColor,(id)[UIColorgreenColor].CGColor];
[gradientLayeraddSublayer:leftLayer];
//右側(cè)漸變色
CAGradientLayer*rightLayer = [CAGradientLayerlayer];
rightLayer.frame=CGRectMake(self.bounds.size.width/2,0,self.bounds.size.width/2,self.bounds.size.height);
//分段設(shè)置漸變色
rightLayer.locations=@[@0.3,@0.9,@1];
rightLayer.colors=@[(id)[UIColoryellowColor].CGColor,(id)[UIColorredColor].CGColor];
[gradientLayeraddSublayer:rightLayer];
CGPointcenter =CGPointMake(100,100);
CGFloatradius =90;
CGFloatstartA = -M_PI_2;
CGFloatendA = -M_PI_2+M_PI*2*_progress;
CAShapeLayer*progressLayer = [CAShapeLayerlayer];
progressLayer.frame=self.bounds;
progressLayer.fillColor= [UIColorclearColor].CGColor;
progressLayer.strokeColor= [UIColorredColor].CGColor;
progressLayer.opacity=1;
progressLayer.lineCap=kCALineCapRound;
progressLayer.lineWidth=10;
UIBezierPath*path = [UIBezierPathbezierPathWithArcCenter:centerradius:radiusstartAngle:startAendAngle:endAclockwise:YES];
progressLayer.path= path.CGPath;
[self.layeraddSublayer:progressLayer];
[gradientLayersetMask:progressLayer];
[self.layeraddSublayer:gradientLayer];
/*
//獲取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
//獲取圓心的位置
CGPoint center = CGPointMake(100, 100);
//設(shè)置半徑
CGFloat radius = 90;
//圓起始點(diǎn)位置
CGFloat startA = - M_PI_2;
//圓終點(diǎn)位置
CGFloat endA = - M_PI_2 + M_PI * 2 *_progress;
//
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES];
//設(shè)置線條寬度
CGContextSetLineWidth(ctx, 10);
//設(shè)置描邊顏色
[[UIColor blueColor] setStroke];
//把路徑添加到上下文
CGContextAddPath(ctx, path.CGPath);
//渲染
CGContextStrokePath(ctx);
*/
}
//drawRect方法只在視圖剛出現(xiàn)執(zhí)行一次,所以需要使用[self setNeedDisplay];
- (void)drawProgress:(CGFloat)progress
{
_progress= progress;
[selfsetNeedsDisplay];
}
效果圖:
