iOS Charts 折线图框架的基本使用
1. 导入框架
通过 cocoapods 管理应用程序时,在 Podfile 文件中,use_frameworks! 的使用区别如下:
使用 use_frameworks! 时 dynamic frameworks 方式 -> .framework
cocoapods 会生成对应的 frameworks 文件
在 Link Binary With Libraries:会生成 Pods_工程名.framework,包含了其它用 cocoapods 导入的第三方框架的 .framework 文件不使用 use_frameworks! 时 static libraries 方式 -> 生成.a文件
cocoapods 会生成相应的 .a文件(静态链接库)
Link Binary With Libraries: libPods-工程名.a 包含了其他用 cocoapods 导入有第三库的 .a 文件
通过 cocoapods 导入 swift 库时,都必须使用 use_frameworks!
use_frameworks!
pod 'Charts'
pod 'ChartsRealm'
终端执行 pod install 完成框架集成
2. Xcode配置
导入框架之后 command + B 编译报如下错误:提示Swift 版本不兼容

解决方式: Pods -> TARGETS 选择对应的库文件 -> Build Settings -> Swift Compiler - Language 修改对应 swift 版本, Charts、ChartsRealm、RealmSwift 都需要设置

当外部 Framework 在编译时需开启 Defines Module,如果没有开启且没有 Framework 源码的情况无需设置。

3. 创建视图及配置
使用框架时,demo先行,选择需要的折线图类型进而研究并使用
这里介绍主要使用的几个库类,仅供参考!
ChartViewBase
属性 描述 .xAxis X坐标轴 _defaultValueFormatter 实现IValueFormatter协议的类,用来将数值进行格式化处理 _data 持有未经过任何处理的原始数据的对象 _highlightPerTapEnabled 点击时显示高亮的标志位,默认为true dragDecelerationEnabled 拖拽时允许减速的标志位,默认为true _dragDecelerationFrictionCoef 拖拽减速的摩擦系数,值为[0,1)区间内,值越大,减速越慢,当值为0时,减速会立即停止,1是非法的值,当设定该值大于等于1时,会自动把1转换成0.999,默认值为0.9 chartDescription 存储一些图表描述的对象 _legend 图例 noDataText 当没有数据时,显示在图标中间的缺省文字,默认为“No chart data available.” noDataFont 没有数据时,提示文字的字体 noDataTextColor 没有数据时,提示文字的颜色 _legendRenderer 图例的渲染器 renderer 数据的渲染器 _viewPortHandler 管理图表的边界,并且绘制约束的对象 _animator 响应动画的对象 _offsetsCalculated 记录是否已经计算好偏移值的标志位 _indicesToHighlight 存高亮对象的数组(目前代码中其实好像就只会有一个元素) drawMarkers 是否绘制标记(点击图标时,弹出来的浮标),默认值为true,(getter=isDrawMarkersEnabled) marker 表示如何显示样式对象 _interceptTouchEvents 是否拦截点击事件,默认为false extraTopOffset,extraRightOffset,extraBottomOffset,extraLeftOffset 上右下左的边距,默认为0 重要方法 描述 open func notifyDataSetChanged() 通知数据改变了,用以设置数据时,重新绘图,但在ChartViewBase中会抛出异常 internal func calculateOffsets() 计算上左下右偏移量,同样在基类中不做具体实现,并抛出异常 internal func calcMinMax() 计算y轴最大最小值,还有x轴跟y轴的范围 internal func setupDefaultFormatter(min: Double, max: Double) 设置默认的格式化器 internal func drawDescription(context: CGContext) 绘制描述的方法 open func highlightValue(x: Double, y: Double, dataSetIndex: Int, callDelegate: Bool) 处理高亮的值的方法 open func getHighlightByTouchPoint(_ pt: CGPoint) -> Highlight? 从触摸点活动高亮对象 internal func drawMarkers(context: CGContext) 绘制标记 internal func drawMarkers(context: CGContext) 获取标记的位置 open func getChartImage(transparent: Bool) -> NSUIImage? 当前图表转换成UIImage的对象 open func save(to path: String, format: ImageFormat, compressionQuality: Double) -> Bool 把当前图标保存到本地 AxisBase
属性 描述 _axisValueFormatter 轴上坐标值的格式化类,遵守IAxisValueFormatter协议的一个类 labelFont 坐标轴数值字体 labelTextColor 坐标轴数值字体颜色 axisLineColor 轴线颜色,默认为gray axisLineWidth 轴线线宽,默认为0.5 axisLineDashPhase 轴线虚线的相位 axisLineDashLengths 轴线为虚线的长度数组,如@[@4.f, @2.f],则为长为4的实线和长为2的虚线空白间隔 gridColor 网格线颜色 gridLineWidth 网格线线宽 gridLineCap 网格线边缘形状 drawGridLinesEnabled 是否绘制网格线 drawAxisLineEnabled 是否绘制轴线 drawLabelsEnabled 是否显示坐标轴数值 _centerAxisLabelsEnabled 坐标值标签是否居中 _limitLines 限制线的数组 drawLimitLinesBehindDataEnabled 限制线绘制在数据后面还是前面,默认为false,即绘制在数据前面 gridAntialiasEnabled 网格是否抗锯齿 _labelCount 坐标轴显示数值的数目,默认为6 decimals 要使用的小数位数,默认为0 granularityEnabled 如果为true,则轴标签由 granularity属性控制,如果为false,则可能会重复轴值,如果两个相邻的轴值取整为相同的值,则可能会发生这种情况,如果使用粒度,可以通过减少可见的轴值来避免。forceLabelsEnabled 如果为true的时候,y坐标值数将会强制限制 重要方法 描述 open func getFormattedLabel(_ index: Int) -> String 根据索引获取已格式化的字符串 open func calculate(min dataMin: Double, max dataMax: Double) 计算最大最小值并且y轴显示的范围。dataMin根据表格数据得到的y最小值,dataMax根据表格获得y的最大值 LineChartDataSet 子类 - 折线的设置
属性 描述 axisDependency 设置数据依赖的轴 - (左/右) lineWidth 线宽,默认为1 drawValuesEnabled 是否绘制线上文字 highlightEnabled 选中拐点,是否开启高亮效果(显示十字线) highlightColor 点击选中拐点的十字线的颜色 highlightLineDashLengths 十字线的虚实长度数组 highlightLineWidth 十字线宽度 drawCirclesEnabled 是否绘制拐点 circleRadius 拐点半径 circleColors 拐点颜色 drawCircleHoleEnabled 是否绘制拐点的空心 circleHoleRadius 拐点空心半径 circleHoleColor 拐点空心的颜色
4. 部分注意点
自定义 X 轴,Y 轴,折线上数据
- x轴,y轴的数据自定义需要遵守协议:IChartAxisValueFormatter
- 折线上的数据自定义需要遵守协议:IChartValueFormatter
- (NSString *)stringForValue:(double)value axis:(ChartAxisBase *)axis {
return [NSString stringWithFormat:@"%.f月",value];
}
5. 部分源码修改
修改十字线虚线样式 ( LineScatterCandleRadarRenderer.swift )

@objc open func drawHighlightLines(context: CGContext, point: CGPoint, set: ILineScatterCandleRadarChartDataSet)
{ // draw vertical highlight lines
if set.isVerticalHighlightIndicatorEnabled
{
context.beginPath()
// 文修2019年08月15日17:55:58
// context.move(to: CGPoint(x: point.x, y: viewPortHandler.contentTop))
// context.addLine(to: CGPoint(x: point.x, y: viewPortHandler.contentBottom))
context.move(to: CGPoint(x: point.x, y: viewPortHandler.contentBottom))
context.addLine(to: CGPoint(x: point.x, y: point.y))
context.strokePath()
}
// draw horizontal highlight lines
if set.isHorizontalHighlightIndicatorEnabled
{
context.beginPath()
// 文修2019年08月15日17:55:58
// context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: point.y))
// context.addLine(to: CGPoint(x: viewPortHandler.contentRight, y: point.y))
context.move(to: CGPoint(x: viewPortHandler.contentLeft, y: point.y))
context.addLine(to: CGPoint(x: point.x, y: point.y))
context.strokePath()
}
}
```
iOS Charts 折线图框架的基本使用的更多相关文章
- UUChart的使用--iOS绘制折线图
UUChart是一个用于绘制图表的第三方,尤其适合去绘制折线图. 二.下载地址: https://github.com/ZhipingYang/UUChartView 三.使用 第一步.首先我们将下载 ...
- iOS画折线图
代码例子效果: 下载地址:http://download.csdn.net/detail/qqmcy/6983187 LineChartViewDemo.h #import <UIKit/UI ...
- canvas图表详解系列(2):折线图
本章建议学习时间4小时 学习方式:详细阅读,并手动实现相关代码(如果没有canvas基础,需要先学习前面的canvas基础笔记) 学习目标:此教程将教会大家如何使用canvas绘制各种图表,详细分解步 ...
- iOS - Quartz 2D 第三方框架 Charts 绘制图表
1.Charts 简介 使用第三方框架 Charts 绘制 iOS 图表.GitHub 源码 Charts Charts 是一款用于绘制图表的框架,可以绘制柱状图.折线图.K线图.饼状图等.Chart ...
- iOS绘制坐标图,折线图-Swift
坐标图,经常会在各种各样的App中使用,最常用的一种坐标图就是折线图,根据给定的点绘制出对应的坐标图是最基本的需求.由于本人的项目需要使用折线图,第一反应就是搜索已经存在的解决方案,因为这种需求应该很 ...
- iOS回顾笔记(05) -- 手把手教你封装一个广告轮播图框架
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- Android绘图机制(四)——使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美
Android绘图机制(四)--使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美 这里为什么不继续把自定义View写下去呢,因为最近项目 ...
- IOS使用Core-Plot画折线图
关于Core-Plot的配置.大家能够參考我的上一篇博客:http://1.wildcat.sinaapp.com/?p=99 版权全部.转载请注明原文转自:http://blog.csdn.net/ ...
- 【Android开源框架】使用andbase开发框架实现绘制折线图
在Android中,当有绘制折线图的需求时.大多数人使用的AChartEngine,来进行折线图的绘制.AChartEngine图表引擎确实能够实现折线图的功能.除此之外,我们还能够使用andbase ...
随机推荐
- 关于log4j
搭建完maven+SpringMVC以后,我们还需要添加日志功能,方便记录应用在应用中产生的日志信息. 1.添加依赖包:依赖中除了对slf4j依赖外还有对邮件插件的依赖.当遇到报错的时候可以发送邮件到 ...
- Spring基于构造函数和设值函数的依赖注入
基于构造函数的依赖注入 我们知道,bean标签中指定的类会进行初始化,这个初始化过程中自然会调用构造函数,那我们也可以利用这个构造函数完成依赖注入. 先创建一个类: public class Text ...
- 如何配置tomcat的环境变量
如何配置tomcat的环境变量 安装好tomcat之后, 按照这个操作,计算机→属性→高级系统设置→高级→环境变量,打开环境变量设置框. 以本人的tomcat 8.0为例:安装下来如图 那么我的tom ...
- Redis 数据结构
一.Redis简介 Redis是一款基于key-value的高性能NoSQL数据库,开源免费,遵守BSD协议.支持string(字符串) . hash(哈希) .list(列表) . set(集合) ...
- scala学习系列二
一 scala语言开发注意事项: 1 Scala程序的执行入口是main()函数 2 Scala语言严格区分大小写. 3 Scala方法由一条条语句构成,每个语句后不需要分号(Scala语言会在每行后 ...
- 北冥'sfish
北冥咸鱼,其名为鲲.鲲之大,long long存不下.化而为鸟,其名为鹏.鹏之背,高精被卡废.怒而颓,其码若怪诞之吟.是咸鱼,颓废则将遇上cz.cz谁,大佬也.<大佬说>者,志奆者也.&l ...
- 【Android - 控件】之MD - RecyclerView的使用
RecyclerView是Android 5.0新特性——Material Design中的一个控件,它将ListView.GridView整合到一起,可以使用极少的代码在ListView.GridV ...
- linux 生成免密登陆步奏
1.大致流程 有时需要从服务器A免密连接到服务器B,这时需要在服务器A生成私钥和公钥,大致过程其实就2步. 1.1 在服务器A生成公钥和私钥 在服务器A上输入如下命令: ssh-keygen -t r ...
- 【SSL1455&1456】 电子老鼠闯迷宫 & 骑士游行
考点概况: 广搜板子 题面: \[\Large\text{电子老鼠闯迷宫}\] \[Time~Limit:1000MS~~Memory~Limit:65536K\] Description 如下图12 ...
- Scrapy 框架 (学习笔记-1)
环境: 1.windows 10 2.Python 3.7 3.Scrapy 1.7.3 4.mysql 5.5.53 一.Scrapy 安装 1. Scrapy:是一套基于Twisted的一部处理框 ...