Charts(iOS)
官方Demo强无敌,毕竟一万好几星的框架,基本可以hold住大部分需求,但是在面对一些特殊设计的时候,那。。就需要深入了解她了~~下面是几处小小的修改供大家参考,文末附Demo!

Charts效果图
1. BalloonMarker
涉及类:
BalloonMarker.swift
这个类来自官方Demo
,你只要用这个类我不信你不改它,可以说这个类本身就是做为范本供大家修改的。
导入
我的项目是OC的,手动导入的Charts
(P.S.真的不知道有没有方法可以使用pod
让Swift
和OC
的框架共存,如果你知道一定要告诉我 (╭ ̄3 ̄)╭♡)。手动将Charts
拖入进来的时候并不会将官方Demo
引入工程中,所以要手动将BalloonMarker.swift
这个文件拖入到Charts
工程下,不要拖入你自己的项目下。额,不太严谨,应该是BalloonMarker ∈ Charts ∈ Your Project
介种关系,如图↓

BalloonMarker位置
使用
请参照官方Demo
中LineChart1ViewController.m
中BalloonMarker
用法,这里多说一句,修改arrowSize
属性为CGSizeZero
,可以避免点击靠近边缘的节点弹出Marker
,而Marker
气泡的尖尖却不指向节点的违和场面的发生(语文6级)。 ### 修改 方法名很直观,你可以重新绘制、更改富文本的段落格式等等,如果像我一样只是想改变展示内容的话,修改外部属性对样式和布局进行微调以及通过下面这个方法传入数据即可达成目的.
|
|
此方法传入的参数类型为ChartDataEntry
,有没有很眼熟?没错,就是在给图表设置数据源时循环创建的那个节点对象,ChartDataEntry
对象存储了节点的所有信息,包含x轴、y轴坐标(y轴真实坐标)、icon
和AnyObject?
类型的data
用来存储额外的数据,对应构造方法为-initWithX:y:data:
。在mBalloonMarker.swfit
上述方法中获取entry.data
设置给label
。
2. 修改最后一个节点的样式
涉及类:
LineChartRenderer.swift
LineChartDataSet
中circleRadius
、circleHoleRadius
、circleHoleColor
、CircleColor
是控制节点样式主要的属性。设计图中折线的最后一个节点和其他节点是不同的,又没有属性可以直接修改最后一个节点样式,所以点进去查看,告诉我SWIFT_CLASS("_TtC6Charts16LineChartDataSet")
,但是Charts
项目中却搜不到这么个类。。。谁能给我一个合理的解释!最终还是全局搜索吧,节点的样式一定逃不过循环和绘制就是了,搜索circleRadius
,发现了一个名叫LineChartRenderer.swift
的类,看名字应该就是它了。
找到了类,那就真鸡儿简单了,进一步定位在drawCircle
方法,这里面有我们想要的全部——循环和绘制,下面就是修改原来是常量(let
)的几个属性为可变的(var
)。
|
|
接下来的问题就是当判定是最后一个节点的时候该如何绘制了
|
|
最终drawCircle
方法被改成了下边这样:
|
|
理论上是应该在外面写一个属性,但是各自的需求不一样设置属性并没有什么卵子用,那就这么招吧。上面这个方法,只需要注意 if j == _xBounds.range + _xBounds.min
的地方就行了。
3. 增加背景彩色条
涉及类:
YAxisRenderer.Swift
最后是绘制斑马纹背景了。有了上面的经验,快速定位到YAxisRender
类,主要思路是在Charts
绘制格线的时候执行自定义的方法在两根gridline
中间画一个矩形并填充颜色。
3.1 在绘制格线的方法中调用自定义绘制方法
|
|
3.2 自定义绘制斑马纹的方法:
|
|
嗯呢,就酱,这是说好的Demo==☞Demo地址