iOS OC 学习手册iOS DeveloperiOS 开发

PNChart之源码分析及使用

2016-09-07  本文已影响710人  啃手高手

PNChart is a simple and beautiful chart lib with animation.
支持LineChart(折线图),PieChart(饼图),BarChart(柱状图),CircleChart(环形图),RadarChart(雷达图),ScatterChart(散点图) 六种图表类型。

源码分析

先看一下PNChart的类列表:


PNChart.png

很容易看出,除了PNBartChart和PNCircleChart,其他每种类型的图表都有自己对应的数据类,之所以BarChart和CircleChart没有数据类也是因为条形图和环形图表现的数据形式比较单一,只需要传入数据或者百分比即可根据横纵坐标绘制出完整的图表。

先看几个类:

接下来我们以最常用的折线图为例,详细分析下源码:
相关的类有三个分别是:PNLineChart,PNLineChartData,PNLineChartDataItem。其中PNLineChartData和PNLineChartDataItem都是数据类,继承自NSObject,为什么需要两个数据类,因为PNLineChart支持同一张表里绘制多条折线,所以,PNLineChartData可以理解为每条折线的数据类,PNLineChartDataItem可以理解为每个点的数据类。

PNLineChartDataItem

PNLineChartDataItem类的重要属性只有一个

@property (readonly) CGFloat y; // should be within the y range

通过类方法:

+ (PNLineChartDataItem *)dataItemWithY:(CGFloat)y;

即可创建点对象。

PNLineChartData

每条线的颜色,透明度,节点数量,标题,是否显示节点标签,节点标签字体,节点标签颜色,节点标签格式,节点的样式,节点颜色,节点的宽度,折线的宽度这些属性可以在PNLineChartData对象来设置。

typedef PNLineChartDataItem *(^LCLineChartDataGetter)(NSUInteger item);

@property (copy) LCLineChartDataGetter getData;

在PNLineChartData中定义了一个获取节点数据的Block:LCLineChartDataGetter,它根据索引item,返回对应数据源的PNLineChartDataItem类对象。

PNLineChart

PNLineChart这个类才是真正绘制图表类。strokeChart和updateChartData:方法是重要的绘制方法,他们会调用calculateChartPath:andPointsPath:andPathKeyPoints:andPathStartEndPoints: 去根据数据源具体的绘制每一条折线。

PNLineChart中还实现了对视图点击事件的处理,获取了用户接触的节点后,通过PNChartDelegate代理方法回调到控制器里去实现用户需要的操作。

如何使用

如何使用在PNChart的git主页,作者已经给出用例了,这里就不赘述了。直接附上连接:PNChart

上一篇 下一篇

猜你喜欢

热点阅读