前几天把AAChartsKit的使用简单写了写,官方使用说明已经写的很详细了。我也就不多说了,今天就讲讲Charts的使用。
0.简介
近期项目需要使用到折线图这样的图表功能,因此接触到了Charts这个框架,不得不说这个图表框架很强大,但是在GitHub上Charts的介绍也比较简单的介绍(直说了和MPAndroidChart类似,大部分使用方法一致),就写写自己的一点心得供大家参考。
Charts使用swift编写,它是仿照MPAndroidChart实现的。所以在安卓和iOS上可以实现一致的效果。如果你们的APP想在两端实现统一的效果,就可以使用这个图标库。
废话不多说了。开始讲解使用方法吧。
1.导入三方库
charts支持cocoapods导入,这就对大多数开发者比较方便了。但是就是使用cocoapdos也需要注意些地方。
由于charts使用swift编写,在swift编写的项目中使用比较方便,在这篇文章中就不详细描述了。但是现如今还是有很多项目使用oc编写,就如我的这个项目。这就需要了解一些oc和swift的桥接了。这就需要看别的文章了。回归正题,开始讲cocoapdos的导入吧。
(1)podfile的设置
(2)将工程中Pods的编译语言设置为SWIFT最新版本
build Settings ->Swift Language Version 改为最新版本
(3)将Chart.framework添加到新建的项目中
点击新建的项目->Build Phases->Link Binary With Libraries-> "+" -> 找到Charts.frame添加
(4)添加OC与Switf桥接
在工程中新建一个Swift文件,名字随便取,如"Chart-Bridging-Header.h",这时候会提示是否建立桥接文件,直接选Create Bridging Header选项,名字无所谓,会自动建立一个桥接文件。在桥接文件里写入@import Charts;
到了这一步,导入就完成了。你就可以在自己的项目使用。
2.使用
设置Chatview的属性
(1)scale属性
顾名思义,就是图标是否支持拖拽,scaleYEnabled = YES即纵坐标支持拖拽,scaleXEnabled = YES即横坐标支持拖拽。
(2)chartDescription属性
打开这个属性,你的图表上将会有关于你的图标的描述。
(3)pinchZoomEnabled
是否支持X轴、Y轴同时缩放,如果是YES ,则代表支持同时缩放。
(4)maxVisibleCount
这个属性是控制图标上的数字展示的最大个数的,如果你的图标不想显示上面的数字,就可以把maxVisibleCount属性设置为0。
(5)legend
这个Bool属性是设置要不要显示图例的,看到上图底部的"-- DataSet 1"了吗,如果你不想要显示这一栏,就把legend.enabled设置为NO。
(6)noDataText
没有数据的时候ChartsView上需要显示什么文字。chartsView中有三个重要的属性需要开发者去设置,那就是leftAxis(左轴),rightAxis(右轴),xAxis(X轴)。
(7)doubleTapToZoomEnabled
是否允许双击缩放。
(8)delegate
代理,大家都懂的。对应的protocal有4个,都是可选选项
//图表中的数值被选中
- (void)chartValueSelected:(ChartViewBase * _Nonnull)chartView entry:(ChartDataEntry * _Nonnull)entry highlight:(ChartHighlight * _Nonnull)highlight;
//图表中的空白区域被点击
- (void)chartValueNothingSelected:(ChartViewBase * _Nonnull)chartView;
//图表缩放
- (void)chartScaled:(ChartViewBase * _Nonnull)chartView scaleX:(CGFloat)scaleX scaleY:(CGFloat)scaleY;
//图标被移动
- (void)chartTranslated:(ChartViewBase * _Nonnull)chartView dX:(CGFloat)dX dY:(CGFloat)dY;
Axis属性
(1)enabled
设置为NO的话,则对应的坐标轴不显示。
(2)labelPosition
表示左轴坐标的位置,有2个选项:YAxisLabelPositionOutsideChart = 0,YAxisLabelPositionInsideChart = 1,坐标显示在轴内或者是轴外。
(3)labelCount
即在坐标轴上最多显示多少个坐标点
(4)drawGridBackgroundEnabled
是否要画网格线
(5)gridLineDashLengths
gridLineDashLengths = @[@2.f, @5.f]即线段宽为2.0f,空格宽为5.0f。
举个例子:
LineChartView *lineChartView = [[LineChartView alloc] init];
[self.view addSubview:lineChartView];
self.lineChartView = lineChartView;
lineChartView.doubleTapToZoomEnabled = NO;//禁止双击缩放 有需要可以设置为YES
lineChartView.gridBackgroundColor = [UIColor clearColor];//表框以及表内线条的颜色以及隐藏设置 根据自己需要调整
lineChartView.borderColor = [UIColor clearColor];
lineChartView.drawGridBackgroundEnabled = NO;
lineChartView.drawBordersEnabled = NO;
lineChartView.descriptionText = @"XXX";//该表格的描述名称
lineChartView.descriptionTextColor = [UIColor whiteColor];//描述字体颜色
lineChartView.legend.enabled = YES;//是否显示折线的名称以及对应颜色 多条折线时必须开启 否则无法分辨
lineChartView.legend.textColor = [UIColor whiteColor];//折线名称字体颜色
//设置动画时间
[lineChartView animateWithXAxisDuration:1];
//设置纵轴坐标显示在左边而非右边
rightAxis = lineChartView.rightAxis;
rightAxis.drawGridLinesEnabled = NO;
leftAxis = lineChartView.leftAxis;
leftAxis.drawGridLinesEnabled = NO;
leftAxis.labelTextColor = [UIColor whiteColor];
//设置横轴坐标显示在下方 默认显示是在顶部
xAxis = lineChartView.xAxis;
xAxis.labelPosition = XAxisLabelPositionBottom;
xAxis.labelTextColor = [UIColor whiteColor];
xAxis.labelCount = 3;
3.设置完属性后,就是填充数据了
在这里我仅以折线图表为例。
我们先介绍两个概念:set和data,LineChartData就是折线图的data类,它可以由很多组set组成,一组就是一条折线。因此我们可以定义set的属性,从而绘制各种各样的折线。示例如下:
//是否绘制图标
set1.drawIconsEnabled = NO;
//折线颜色
[set1 setColor:UIColor.blackColor];
//折线点的颜色
[set1 setCircleColor:UIColor.blackColor];
//折线的宽度
set1.lineWidth = 1.0;
//折线点的宽度
set1.circleRadius = 3.0;
//是否画空心圆
set1.drawCircleHoleEnabled = NO;
//折线点的值的大小
set1.valueFont = [UIFont systemFontOfSize:9.f];
//图例的线宽
set1.formLineWidth = 1.0;
//图例的字体大小
set1.formSize = 15.0;
开始填充
//定义一个数组承接数据
//对应Y轴上面需要显示的数据
NSMutableArray *yVals = [[NSMutableArray alloc] init];
for (int i = 0; i < self.financeLineDotDataList.count; i++) {
BTCTrenddata *dotData = (BTCTrenddata *)[self.financeLineDotDataList objectAtIndex:i];
//将横纵坐标以ChartDataEntry的形式保存下来,注意横坐标值一般是i的值,而不是你的数据 //里面具体的值,如何将具体数据展示在X轴上我们下面将会说到。
ChartDataEntry *entry = [[ChartDataEntry alloc] initWithX:i y:dotData.price];
[yVals addObject:entry];
}
LineChartDataSet *set1 = nil;
//请注意这里,如果你的图表以前绘制过,那么这里直接重新给data赋值就行了。
//如果没有,那么要先定义set的属性。
if (self.financeLineChartsView.data.dataSetCount > 0) {
LineChartData *data = (LineChartData *)self.financeLineChartsView.data;
set1 = (LineChartDataSet *)data.dataSets[0];
// set1.yVals = yVals;
set1 = (LineChartDataSet *)self.financeLineChartsView.data.dataSets[0];
set1.values = yVals;
//通知data去更新
[self.financeLineChartsView.data notifyDataChanged];
//通知图表去更新
[self.financeLineChartsView notifyDataSetChanged];
}else{
//创建LineChartDataSet对象
set1 = [[LineChartDataSet alloc] initWithValues:yVals];
//自定义set的各种属性
//设置折线的样式
set1.drawIconsEnabled = NO;
set1.formLineWidth = 1.1;//折线宽度
set1.formSize = 15.0;
set1.drawValuesEnabled = YES;//是否在拐点处显示数据
set1.valueColors = @[[UIColor whiteColor]];//折线拐点处显示数据的颜色
[set1 setColor:RGBCOLOR(248, 144, 28)];//折线颜色
//折线拐点样式
set1.drawCirclesEnabled = NO;//是否绘制拐点
//第二种填充样式:渐变填充
set1.drawFilledEnabled = YES;//是否填充颜色
NSArray *gradientColors = @[(id)RGBACOLOR(218,168,42,0).CGColor,
(id)RGBACOLOR(248,223,91,1).CGColor];
CGGradientRef gradientRef = CGGradientCreateWithColors(nil, (CFArrayRef)gradientColors, nil);
set1.fillAlpha = 1.0f;//透明度
set1.fill = [ChartFill fillWithLinearGradient:gradientRef angle:90.0f];//赋值填充颜色对象
CGGradientRelease(gradientRef);//释放gradientRef
//点击选中拐点的交互样式
set1.highlightEnabled = YES;//选中拐点,是否开启高亮效果(显示十字线)
set1.highlightColor = RGBCOLOR(125, 125, 125);//点击选中拐点的十字线的颜色
set1.highlightLineWidth = 1.1/[UIScreen mainScreen].scale;//十字线宽度
set1.highlightLineDashLengths = @[@5, @5];//十字线的虚线样式
//将 LineChartDataSet 对象放入数组中
NSMutableArray *dataSets = [[NSMutableArray alloc] init];
[dataSets addObject:set1];
//创建 LineChartData 对象, 此对象就是lineChartView需要最终数据对象
LineChartData *data = [[LineChartData alloc] initWithDataSets:dataSets];
[data setValueFont:[UIFont systemFontOfSize:8.f]];//文字字体
[data setValueTextColor:[UIColor whiteColor]];//文字颜色
self.financeLineChartsView.data = data;
//这里可以调用一个加载动画即1s出来一个绘制点
[self.financeLineChartsView animateWithXAxisDuration:1.0f];
}
到了这一步,就基本结束了数据填充。我们也就完成了基本图表操作。
补充:masnory添加图表、k线图
写到这里就基本完成了基础操作,下一篇文章我会把我遇到的一些问题写出来。
来源:oschina
链接:https://my.oschina.net/u/4263721/blog/3704107