画一个圆圈,用不同的颜色填充不同的部分

我是一个新手ios程序员。在我的一个项目中,我需要绘制一个圆圈,其中不同部分的圆圈会填充不同的颜色。我可以绘制圆圈,但是我无法确定不同的部分并填充不同的颜色。下面是一个截图,以澄清我想画的东西。 用不同的颜色圈

一个帮助,将不胜感激。

您可以使用具有UIBezierPath方法的addArcWithCenter:radius:startAngle:endAngle:clockwise:您可以在其中指定半径,中心和angular度。 代码可能看起来像这样画绿色的四分之一圆:

 CGPoint center = CGPointMake(CGRectGetWidth(self.bounds) / 2.f, CGRectGetHeight(self.bounds) / 2.f); CGFloat radius = center.x - 10.f; UIBezierPath *portionPath = [UIBezierPath bezierPath]; [portionPath moveToPoint:center]; [portionPath addArcWithCenter:center radius:radius startAngle:0.f endAngle:M_PI_2 clockwise:YES]; [portionPath closePath]; [[UIColor greenColor] setFill]; [portionPath fill]; UIBezierPath *portionPath1 = [UIBezierPath bezierPath]; [portionPath1 moveToPoint:center]; [portionPath1 addArcWithCenter:center radius:radius startAngle:M_PI_2 endAngle:M_PI clockwise:YES]; [portionPath1 closePath]; [[UIColor blueColor] setFill]; [portionPath1 fill]; 

当然你也可以考虑使用像CorePlot这样的库。

我们有6class

CircleViewController.h,CircleViewController.m,GraphView.h,GraphView.h,CirclePart.h,CirclePart.m

CirclePart.h

 #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface CirclePart : NSObject @property (nonatomic) CGFloat startDegree; @property (nonatomic) CGFloat endDegree; @property (nonatomic) UIColor *partColor; -(id)initWithStartDegree:(CGFloat)startDegree endDegree:(CGFloat)endDegree partColor:(UIColor*)partColor; @end 

CirclePart.m

 #import "CirclePart.h" @implementation CirclePart -(id)initWithStartDegree:(CGFloat)startDegree endDegree:(CGFloat)endDegree partColor:(UIColor*)partColor { self = [super init]; if (self) { self.startDegree = startDegree; self.endDegree = endDegree; self.partColor = partColor; } return self; } @end 

GraphView.h

 #import <UIKit/UIKit.h> #import "CirclePart.h" @interface GraphView : UIView @property (nonatomic) CGPoint centrePoint; @property (nonatomic) CGFloat radius; @property (nonatomic) CGFloat lineWidth; @property (nonatomic, strong) NSArray *circleParts; -(id)initWithFrame:(CGRect)frame CentrePoint:(CGPoint)centrePoint radius:(CGFloat)radius lineWidth:(CGFloat)lineWidth circleParts:(NSArray*)circleParts; @end 

GraphView.m

 #import "GraphView.h" @implementation GraphView -(id)initWithFrame:(CGRect)frame CentrePoint:(CGPoint)centrePoint radius:(CGFloat)radius lineWidth:(CGFloat)lineWidth circleParts:(NSArray*)circleParts { self = [super initWithFrame:frame]; if (self) { self.centrePoint = centrePoint; self.radius = radius; self.lineWidth = lineWidth; self.circleParts = circleParts; } return self; } - (void)drawRect:(CGRect)rect { [self drawCircle]; } - (void)drawCircle { CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetLineWidth(context, _lineWidth); for(CirclePart *circlePart in _circleParts) { CGContextMoveToPoint(context, _centrePoint.x, _centrePoint.y); CGContextAddArc(context, _centrePoint.x , _centrePoint.y, _radius, [self radians:circlePart.startDegree], [self radians:circlePart.endDegree], 0); CGContextSetFillColorWithColor(context, circlePart.partColor.CGColor); CGContextFillPath(context); } } -(float) radians:(double) degrees { return degrees * M_PI / 180; } @end 

CircleViewController.h

 #import <UIKit/UIKit.h> @interface CircleViewController : UIViewController @end 

CircleViewController.m

 #import "CircleViewController.h" #import "GraphView.h" #import "CirclePart.h" @interface CircleViewController () @end @implementation CircleViewController - (void)viewDidLoad { [super viewDidLoad]; CirclePart *part1 = [[CirclePart alloc] initWithStartDegree:0 endDegree:120 partColor:[UIColor redColor]]; CirclePart *part2 = [[CirclePart alloc] initWithStartDegree:120 endDegree:250 partColor:[UIColor blueColor]]; CirclePart *part3 = [[CirclePart alloc] initWithStartDegree:250 endDegree:360 partColor:[UIColor grayColor]]; NSArray *circleParts = [[NSArray alloc] initWithObjects:part1, part2, part3, nil]; CGRect rect = CGRectMake(100, 100, 200, 200); CGPoint circleCenter = CGPointMake(rect.size.width / 2, rect.size.height / 2); GraphView *graphView = [[GraphView alloc] initWithFrame:rect CentrePoint:circleCenter radius:80 lineWidth:2 circleParts:circleParts]; graphView.backgroundColor = [UIColor whiteColor]; graphView.layer.borderColor = [UIColor redColor].CGColor; graphView.layer.borderWidth = 1.0f; [self.view addSubview:graphView]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end 

这是一个简单的三angular学问题。 找出你需要的饼形部分的angular度(饼形片百分比时间360度),然后移动到中心。 以适当的angular度与圆弧边缘成直线,弧形到所需圆弧angular的圆弧片的下一侧,然后返回到中心。

或者,您可以使用CorePlot为您制作饼图。