1 //
2 // ViewController.m
3 // 画饼状图
4 //
5 // Created by zjj on 15/7/1.
6 // Copyright (c) 2015年 zjj. All rights reserved.
7 //
8
9 #import "ViewController.h"
10 #import "DJPieView.h"
11 @interface ViewController ()
12
13 @end
14
15 @implementation ViewController
16
17 - (void)viewDidLoad {
18 [super viewDidLoad];
19 DJPieView *pieView = [[DJPieView alloc]initWithFrame:CGRectMake(10, 50, 200, 200)];
20 pieView.backgroundColor = [UIColor grayColor];
21 [self.view addSubview:pieView];
22 pieView.sessions = @[@10,@20,@5,@13,@15,@7,@30];
23 pieView.sessionsColor = @[[UIColor redColor],[UIColor blueColor],[UIColor whiteColor],[UIColor blackColor],[UIColor yellowColor],[UIColor orangeColor],[UIColor greenColor]];
24 }
25
26 @end
//
// DJPieView.h
// 画饼状图
//
// Created by zjj on 15/7/1.
// Copyright (c) 2015年 zjj. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface DJPieView : UIView
@property (nonatomic,strong)NSArray *sessions;
@property (nonatomic,strong)NSArray *sessionsColor;
@end
//
// DJPieView.m
// 画饼状图
//
// Created by zjj on 15/7/1.
// Copyright (c) 2015年 zjj. All rights reserved.
//
#import "DJPieView.h"
@implementation DJPieView
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
NSInteger count = self.sessions.count;
if (count == 0) return;
CGFloat cententX = rect.size.width*0.5;
CGFloat cententY = rect.size.height*0.5;
CGFloat reaius = cententX;
CGFloat startAngle = 0;
NSInteger sum = 0;
for (NSInteger i = 0 ; i < count; i++) {
sum += [self.sessions[i] integerValue];
}
for (NSInteger i = 0 ; i < count; i++) {
// 设定颜色
[(UIColor *)self.sessionsColor[i] set];
// 计算数据占据整个圆的比例
CGFloat scale = [self.sessions[i] integerValue] / (sum * 1.0);
//计算结束位置 比例*两个半圆
CGFloat endAngle = startAngle + scale * 2 * M_PI;
//指定弧的中心点
CGContextMoveToPoint(ctx, cententX, cententY);
CGContextAddArc(ctx, cententX, cententY, reaius, startAngle, endAngle, 0);
CGContextFillPath(ctx);
//重新设置起点位置 供下次循环使用
startAngle = endAngle;
}
}
@end
![]()