博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CGContextRef简单绘制-03饼图、柱状图
阅读量:6078 次
发布时间:2019-06-20

本文共 1704 字,大约阅读时间需要 5 分钟。

hot3.png

饼图

实现方式:

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];}

 

转载于:https://my.oschina.net/mexiaobai1315/blog/691558

你可能感兴趣的文章
CentOS 6上安装xfce桌面环境
查看>>
SharedPreferences的工具类
查看>>
屏幕适配那点事
查看>>
nyoj-----幸运三角形
查看>>
C166 Interfacing C to Assembler
查看>>
wcf服务编程(第3版)文摘
查看>>
T4批量生成多文件
查看>>
论述Android通过HttpURLConnection与HttpClient联网代理网关设置
查看>>
数据存储之ContentProvide
查看>>
九度 1455:珍惜现在,感恩生活(多重背包)
查看>>
同步机制
查看>>
玩了一下SDN:MININET+FLOODLIGHT,感觉这确实是一个趋势啊
查看>>
C语言printf()输出格式大全
查看>>
可执行文件(ELF)格式之讲解
查看>>
JAVA中获取当前系统时间 - Matrix54 - 博客园
查看>>
C#foreach的用法
查看>>
axure变量的使用
查看>>
PHP创建XML文件讲解
查看>>
CentOS 6.3下搭建Web服务器
查看>>
linux学习历程
查看>>