上一篇讲了Charts的基本使用方法。这一篇讲讲我在开发中遇到的问题,以及网上一些朋友遇到的问题。

1.在开发中遇到最右边的坐标或者最上面的坐标被遮盖一半显示不全。

就像我说的这样,我在开发中,x轴显示6个坐标,最右面的左边显示时间(类似19/01),结果只显示了19/右面的显示不全。这样的问题也可能出现在Y轴。解决方法比较简单。就是向上向右添加区域。

// chant view 顶部偏移量
[self.lineChartView setExtraTopOffset:40];
// chant view 右侧偏移量
[self.lineChartView setExtraRightOffset:20];

据说这行代码也可以实现

xAxis.spaceMax = 0.5;

2.动态展开

// 柱形图
CGFloat flout = self.xArray.count/3.8; //完美的值
[_chartView1 zoomAndCenterViewAnimatedWithScaleX:flout scaleY:1 xValue:0 yValue:0 axis:0 duration:1]; // 分段图 CGFloat flout = self.xArray.count/7; //完美的值
[_chartView zoomAndCenterViewAnimatedWithScaleX:flout scaleY:1 xValue:0 yValue:0 axis:0 duration:1]; // 折线图
CGFloat flout = xArray.count/5;
[_chartView zoomAndCenterViewAnimatedWithScaleX:flout scaleY:1 xValue:0 yValue:0 axis:0 duration:1];

参考:博客(使用柱状图较多)

3.表格联动

这个需求可以用协议解决:

- (void)chartScaled:(ChartViewBase *)chartView scaleX:(CGFloat)scaleX scaleY:(CGFloat)scaleY {

 CGAffineTransform srcMatrix = chartView.viewPortHandler.touchMatrix;
[self.combinedChartView.viewPortHandler refreshWithNewMatrix:srcMatrix chart:self.combinedChartView invalidate:YES];
[self.barChartView.viewPortHandler refreshWithNewMatrix:srcMatrix chart:self.barChartView invalidate:YES];
} - (void)chartTranslated:(ChartViewBase *)chartView dX:(CGFloat)dX dY:(CGFloat)dY { CGAffineTransform srcMatrix = chartView.viewPortHandler.touchMatrix;
[self.combinedChartView.viewPortHandler refreshWithNewMatrix:srcMatrix chart:self.combinedChartView invalidate:YES];
[self.barChartView.viewPortHandler refreshWithNewMatrix:srcMatrix chart:self.barChartView invalidate:YES];
}

4.在一个图表上绘制多种类型的线表,例如K线图+柱状图

这个需求会用到另一个ChartView类型:CombinedChartView

CombinedChartData *combinedData = [[CombinedChartData alloc] init];
combinedData.lineData = [self generateLineData];
combinedData.candleData = [self generateCandleData];

参考:博客(还有一些关于k线图的知识点)

5.设置x轴显示一定数量的数据

这时候最好不要留着labelcount数量设置。( xAxis.labelCount = 5;)

self.lineView.data = 你的数据(LineChartData )
// 设置完数据后的代码 在设置x轴显示
[self.lineView setVisibleXRangeWithMinXRange:6 maxXRange:8]; // 设置为整数偶尔会出现最后一个数据不显示情况 6->5.9 8->8.1
// 网上例子
//设置一页显示的数据条数,超出的数量需要滑动查看:
_barChartView.setVisibleXRangeMaximum(double);
//需要在设置数据源后生效(这是一个坑,懒加载写这个方法并没任何反应,必须在调用数据后使用才有效果)

6.交互柱状图时,只让用户左右滑动,不缩放

由于chart官网都是默认先缩放后才可以滑动,这就出现了困难,经过几番查找,发现只要在创建图表时就设置缩放的比例,这样用户交互时,就不用先放大后才可以滑动,从而解决需求,当然x,y轴的手势启动也要相应的设置下。

// 需求:只滑动不缩放:(系统内部默认是先缩放后滑动)及初始化时x轴就缩放1.5倍,就可以滑动了,
ChartViewPortHandler *scaleX = _barChartView.viewPortHandler;[scaleX setMinimumScaleX:1.5f];
//设置动画效果,可以设置X轴和Y轴的动画效果
[_barChartView animateWithYAxisDuration:0.25f];

7.当x轴每一个单元数据太长(比如说学生的名字太长),就会形成太拥挤的现象

// 可以倾斜显示x轴每一个单元数据,
xAxis.labelRotationAngle = -30;
// x轴上名字的旋转角度,仿网页上的

8.一个关于折线图曲线 高亮选中的博客

9.自定义markview

下面是我写的一个简单的MarkView

import UIKit
import Charts class CustomMarker: MarkerView { var rankLabel = UILabel()
var numLabel = UILabel() @objc open var dataArray :[StaffMonthStatisticModel] = []
var monthModel = StaffMonthStatisticModel() override func refreshContent(entry: ChartDataEntry, highlight: Highlight) {
super.refreshContent(entry: entry, highlight: highlight) monthModel = self.dataArray[Int(entry.x)]
NSLog("%@ ---- %@", monthModel.rank,monthModel.dealSucceedNum)
rankLabel.text = monthModel.rank
numLabel.text = monthModel.dealSucceedNum
} override func draw(context: CGContext, point: CGPoint) {
super.draw(context: context, point: point) rankLabel.removeFromSuperview()
numLabel.removeFromSuperview() self.bounds.size = CGSize.init(width: 40, height: 40)
self.offset = CGPoint(x: 0, y: -self.bounds.size.height - 2) let topimageView = UIImageView.init(frame: CGRect.init(x: 0, y: 0, width: 18, height: 18))
topimageView.image = UIImage.init(named: "month_uo")
self.addSubview(topimageView) rankLabel = UILabel.init(frame: CGRect.init(x: 18, y: 0, width: 22, height: 20))
rankLabel.textColor = UIColor.black
rankLabel.font = UIFont.systemFont(ofSize: 12)
rankLabel.adjustsFontSizeToFitWidth = true
rankLabel.textAlignment = .right
self.addSubview(rankLabel) let bottomimageView = UIImageView.init(frame: CGRect.init(x: 0, y: 22, width: 18, height: 18))
bottomimageView.image = UIImage.init(named: "month_complete")
self.addSubview(bottomimageView) numLabel = UILabel.init(frame: CGRect.init(x: 18, y: 20, width: 22, height: 20))
numLabel.textColor = UIColor.black
numLabel.font = UIFont.systemFont(ofSize: 12)
numLabel.adjustsFontSizeToFitWidth = true
numLabel.textAlignment = .right
self.addSubview(numLabel)
} }

使用

//    // 弹出 为了确定有 数组已放到下面
// CustomMarker *marker = [[CustomMarker alloc] init];
// marker.chartView = _chartView;
// _chartView.marker = marker;

【iOS】图表实现-Charts(二)的更多相关文章

  1. iOS 图表工具charts之CombinedChartView

    关于charts的系列视图介绍传送门: iOS 图表工具charts介绍 iOS 图表工具charts之LineChartView iOS 图表工具charts之BarChartView iOS 图表 ...

  2. iOS 图表工具charts之CandleStickChartView(K线)

    关于charts的系列视图介绍传送门: iOS 图表工具charts介绍 iOS 图表工具charts之LineChartView iOS 图表工具charts之BarChartView iOS 图表 ...

  3. iOS 图表工具charts之PieChartView

    关于charts的系列视图介绍传送门: iOS 图表工具charts介绍 iOS 图表工具charts之LineChartView iOS 图表工具charts之BarChartView iOS 图表 ...

  4. iOS 图表工具charts之BarChartView

    关于charts的系列视图介绍传送门: iOS 图表工具charts介绍 iOS 图表工具charts之LineChartView iOS 图表工具charts之BarChartView iOS 图表 ...

  5. iOS 图表工具charts之LineChartView

    关于charts的系列视图介绍传送门: iOS 图表工具charts介绍 iOS 图表工具charts之LineChartView iOS 图表工具charts之BarChartView iOS 图表 ...

  6. iOS 图表工具charts介绍

    charts是一个很好的绘图工具,功能非常强大,可以用来绘制折线,柱状图,饼状图,k线图,k线分时图,雷达图,气泡图等等,charts是一款仿照安卓 MPAndroidChart而来的一个基于swif ...

  7. iOS图表库Charts集成与使用

    Charts是一个很优秀的图表库,它支持Android.iOS.tvOS和macOS,这样使用起来,可以节省学习成本,可以从GitHub上了解更多信息.本文记录在iOS项目上的集成与使用. Chart ...

  8. JHChart 1.1.0 iOS图表工具库中文ReadMe

    JHChart(最新版本1.1.0) 好吧,的确当前的github上已经存有不少的iOS图表工具库,然而,当公司的项目需要图表时,几乎没有哪个第三方能够完全满足我的项目需求.无奈之下,本人不得不花费一 ...

  9. Android图表库MPAndroidChart(二)——线形图的方方面面,看完你会回来感谢我的

    Android图表库MPAndroidChart(二)--线形图的方方面面,看完你会回来感谢我的 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库MP ...

  10. iOS使用Zbar扫描二维码

    iOS使用Zbar扫描二维码 标签(空格分隔):二维码扫描 iOS Zbar64位 正文: 首先下载一个支持64位系统的ZbarSDK的包,保存在了我的云盘里,地址:ZbarSDK 把文件拖到工程里面 ...

随机推荐

  1. idea maven 打包错误 [ERROR] javac options source files

    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-c ...

  2. 证明:C++ std::shared_ptr的引用不会增加它的计数值

    #include <thread> #include <memory> #include <Windows.h> int main() { std::thread ...

  3. 7.Java Spring框架源码分析-IOC-创建spring容器

    目录 1. 要分析的代码 2. 创建ApplicationContext 2.1. AnnotationConfigApplicationContext构造方法 2.2. 刷新ioc容器 2.2.1. ...

  4. C# 把Parameter参数都列出来,把对象模型Json 化

    https://www.cnblogs.com/wangjunwei/p/4523739.html sqlObj.Value.Select(x => string.Format("'{ ...

  5. Oracle入门笔记

    数据库迁移 对于数据库迁移来说,如果源数据库与目标数据库版本一致,推荐使用Oracle导入或者pl/sql导入:如果版本不一致,则可以使用sql导入的方式. 创建表空间 create tablespa ...

  6. rustdesk自建服务器

    前言 rustdesk是一款免费开源的 远程控制软件. 它内置服务器 开箱即用. 不过提供的免费服务器在国外,白嫖起来 有点卡顿 建议自建服务器 . 下边是教程 安装docker和docker com ...

  7. 前端开发系列120-进阶篇之deepClone

    本文讨论数据的拷贝,并给出深拷贝的实现代码. 拷贝即复制( copy | clone ),获取指定数据副本的一种行为,理论上我们可以对任意类型的数据进行拷贝,包括但不限于null.undefined. ...

  8. ETL集成工具丨如何运用ETLCloud单步调试断点功能

    在现代数据处理领域,ETLCloud 的单步调试断点功能正成为数据管理的重要工具.ETLCloud 是一个强大的云端数据处理平台,它提供了灵活的单步调试功能,使得用户能够逐步跟踪和分析数据处理流程.本 ...

  9. [NISACTF 2022]popchains

    题目源码 Happy New Year~ MAKE A WISH <?php echo 'Happy New Year~ MAKE A WISH<br>'; if(isset($_G ...

  10. Unity Editor 编辑器开发全通关

    https://github.com/XINCGer/UnityToolchainsTrick https://zhuanlan.zhihu.com/p/503154643