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 折线图框架的基本使用的更多相关文章

  1. UUChart的使用--iOS绘制折线图

    UUChart是一个用于绘制图表的第三方,尤其适合去绘制折线图. 二.下载地址: https://github.com/ZhipingYang/UUChartView 三.使用 第一步.首先我们将下载 ...

  2. iOS画折线图

    代码例子效果:  下载地址:http://download.csdn.net/detail/qqmcy/6983187 LineChartViewDemo.h #import <UIKit/UI ...

  3. canvas图表详解系列(2):折线图

    本章建议学习时间4小时 学习方式:详细阅读,并手动实现相关代码(如果没有canvas基础,需要先学习前面的canvas基础笔记) 学习目标:此教程将教会大家如何使用canvas绘制各种图表,详细分解步 ...

  4. iOS - Quartz 2D 第三方框架 Charts 绘制图表

    1.Charts 简介 使用第三方框架 Charts 绘制 iOS 图表.GitHub 源码 Charts Charts 是一款用于绘制图表的框架,可以绘制柱状图.折线图.K线图.饼状图等.Chart ...

  5. iOS绘制坐标图,折线图-Swift

    坐标图,经常会在各种各样的App中使用,最常用的一种坐标图就是折线图,根据给定的点绘制出对应的坐标图是最基本的需求.由于本人的项目需要使用折线图,第一反应就是搜索已经存在的解决方案,因为这种需求应该很 ...

  6. iOS回顾笔记(05) -- 手把手教你封装一个广告轮播图框架

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  7. Android绘图机制(四)——使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美

    Android绘图机制(四)--使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美 这里为什么不继续把自定义View写下去呢,因为最近项目 ...

  8. IOS使用Core-Plot画折线图

    关于Core-Plot的配置.大家能够參考我的上一篇博客:http://1.wildcat.sinaapp.com/?p=99 版权全部.转载请注明原文转自:http://blog.csdn.net/ ...

  9. 【Android开源框架】使用andbase开发框架实现绘制折线图

    在Android中,当有绘制折线图的需求时.大多数人使用的AChartEngine,来进行折线图的绘制.AChartEngine图表引擎确实能够实现折线图的功能.除此之外,我们还能够使用andbase ...

随机推荐

  1. linux磁盘分区、格式化、挂载

    新建分区的操作步骤,如下图: 1)RAID卡: 机器有没有RAID卡可以在开机时看有没有出现配置RAID什么的提示(亲测),系统运行时有没有,不知道! 服务器大多有这个新加硬盘后不修改raid,开即f ...

  2. Pytorch文本分类(imdb数据集),含DataLoader数据加载,最优模型保存

    用pytorch进行文本分类,数据集为keras内置的imdb影评数据(二分类),代码包含六个部分(详见代码) 使用环境: pytorch:1.1.0 cuda:10.0 gpu:RTX2070 (1 ...

  3. HashMap的源码学习以及性能分析

    HashMap的源码学习以及性能分析 一).Map接口的实现类 HashTable.HashMap.LinkedHashMap.TreeMap 二).HashMap和HashTable的区别 1).H ...

  4. Swoft源码之Swoole和Swoft的分析

    这篇文章给大家分享的内容是关于Swoft 源码剖析之Swoole和Swoft的一些介绍(Task投递/定时任务篇),有一定的参考价值,有需要的朋友可以参考一下. 前言 Swoft的任务功能基于Swoo ...

  5. 2019-11-7:sql注入防御,webshell概念,学习笔记

    sql注入防护GPC,magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post.get.cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特 ...

  6. 【集训Day1 测试】选择课题

    选择课题(bestproject) [问题描述] Robin 要在下个月交给老师 n 篇论文,论文的内容可以从 m 个课题中选择.由于课题数有限,Robin 不得不重复选择一些课题.完成不同课题的论文 ...

  7. 使用aop加解密http接口

    背景 最近在写一个小程序接口,由于安全性比较高,因此需要给请求参数和响应进行加密处理.如果在每个方法上都加密解密,那样代码就显得太繁琐了而且工作量会加大.所以,我们会统一进行加解密处理,一种比较传统的 ...

  8. python20个骚操作

    Python小白需要知道的 20 个骚操作! Python 是一个解释型语言,可读性与易用性让它越来越热门.正如 Python 之禅中所述: 优美胜于丑陋,明了胜于晦涩. 在你的日常编码中,以下技巧可 ...

  9. Android Activity生命周期及启动模式

    曾经搞过许多东西,再熟练的东西一段时间没有碰都会生疏或忘记.后来体会到写成文档记录下来的重要性,但有些word或ppt记录下来的东西随着时间流逝会丢失,或者不愿去看.或许保存成博客的形式,会是更好的选 ...

  10. js实现冒泡排序(bubble sort)快速排序(quick sort)归并排序(merge sort)

    排序问题相信大家都比较熟悉了.用js简单写了一下几种常用的排序实现.其中使用了es6的一些语法,并且不仅限于数字--支持各种类型的数据的排序.那么直接上代码: function compare (a, ...