PNChart之源码分析及使用

作者: 啃手高手 | 来源:发表于2016-09-07 17:55 被阅读710次

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

    源码分析

    先看一下PNChart的类列表:


    PNChart.png

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

    先看几个类:

    • PNChart:导入所有类的头文件,方便在使用的时候直接导入PNChart即可。
    • PNColor:使用宏定义了颜色值方便绘图时直接使用。
    • PNChartLabel:继承UILabel定义的一个简单Label。
    • PNChartDelegate:所有图表的点击事件回调代理都统一写在这里。
    • PNGenericChart:所有图表类的父类,负责图例是否显示以及样式等设置。每个子类都需要重写getLegendWithMaxWidth方法来返回各自的图例视图。

    接下来我们以最常用的折线图为例,详细分析下源码:
    相关的类有三个分别是: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

    相关文章

      网友评论

        本文标题:PNChart之源码分析及使用

        本文链接:https://www.haomeiwen.com/subject/eedjettx.html