饼图
实现方式:
1、先计算出每组数据占总数据的比例;
2、每组数据所占的百分比乘以360度,得出饼图的角度
3.依次画出每组的数据;
//绘制饼状图 //总共100,三个饼图 25、25、50,每个饼图颜色随机 //根据每个饼图占据总数的百分比乘上360度,得出每个饼图的大小 NSArray *data = @[@28, @42, @30]; CGPoint center = CGPointMake(100, 100); CGFloat radius = 90; CGFloat startA = 0; CGFloat endA = 0; for(int i = 0; i < data.count; i++){ //获取上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); //绘图路径 startA = endA; NSNumber *num = data[i]; CGFloat angle = num.integerValue / 100.0 * M_PI * 2; endA = startA + angle; UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:startA endAngle:endA clockwise:YES]; [path addLineToPoint:center]; CGContextAddPath(ctx, path.CGPath); CGContextFillPath(ctx); }
柱状图
实现方式:
1、根据数据的总个数,计算出每组数据形成柱状图时所占View的宽度,两个柱状图直接的间隔大小 = 柱状图的宽度
柱状图W = ViewW / (数据总个数 * 2 - 1)
2、根据每组数据占据总数的比例,计算出柱状图的高度;
//画柱状图 //总共100,三个柱状图 25、25、50,每个柱状图颜色随机 //根据每个柱状图占据总数的百分比乘上View高度,得出每个柱状图的高度 //两个柱状图直接的间隔=柱状图的宽度,View上显示的柱状图+间隔=柱状图个数*2-1 NSArray *data = @[@28, @32, @40]; NSInteger viewW = rect.size.width; NSInteger viewH = rect.size.height; CGFloat barH = 0; //柱状图高度 CGFloat barW = viewW / (data.count * 2 - 1); //柱状图宽度 for(int i = 0; i
产生随机颜色
可以把下面这段代码包装成UIColor的分类,方便使用
+(instancetype)RandomColor{ CGFloat r = arc4random_uniform(255) / 255.0; CGFloat g = arc4random_uniform(255) / 255.0; CGFloat b = arc4random_uniform(255) / 255.0; return [UIColor colorWithRed:r green:g blue:b alpha:1];}