本文来自简书,原文地址:http://www.jianshu.com/p/f7906f5b4f4c

最近一段时间写了一个iOS的K线图。写这个纯属个人兴趣,正好提高一下自己绘图方面的能力。在写的时候,参考了Cocoa-Charts 的实现思路。 废话不多说,先上图:

特点:

  • 采用 CAShapeLayer + UIBezierPath绘制,绘制效率高,占用内存低
  • 底层视图是UIScrollView,ScrollView上面添加一个View,所有的绘制在这个View上完成。体验流畅丝滑,FPS平均在55帧以上
  • 指标支持MACD WR KDJ,指标计算采用TALib,方便扩展
  • 横竖屏切换
  • 右拉加载更多数据

    代理方法

    /**
    取得当前屏幕内模型数组的开始下标以及个数@param leftPostion 当前屏幕最右边的位置
    @param index 下标
    @param count 个数
    */
    - (void)displayScreenleftPostion:(CGFloat)leftPostion startIndex:(NSInteger)index count:(NSInteger)count;
    /**
    长按手势获得当前k线下标以及模型@param kLineModeIndex 当前k线在可视范围数组的位置下标
    @param kLineModel   k线模型
    */
    - (void)longPressCandleViewWithIndex:(NSInteger)kLineModeIndex kLineModel:(ZYWCandleModel *)kLineModel;
    /**
    返回当前屏幕最后一根k线模型@param kLineModel k线模型
    */
    - (void)displayLastModel:(ZYWCandleModel *)kLineModel;
    /**
    加载更多数据
    */
    - (void)displayMoreData;`

基础属性方法

/**数据源数组 在调用绘制方法之前设置 。Demo中数据源个数是固定的,如需实现类似右拉加载更多效果(参考网易贵金属),需要在每次添加数据的时候设置 然后调用绘制方法 (现在本地数据是重复的6组)*/
@property (nonatomic,strong) NSMutableArray<__kindof ZYWCandleModel*> *dataArray;/**当前屏幕范围内显示的k线模型数组*/
@property (nonatomic,strong) NSMutableArray *currentDisplayArray;/**当前屏幕范围内显示的k线位置数组*/
@property (nonatomic,strong) NSMutableArray *currentPostionArray;/**可视区域显示多少根k线 (如果数据源数组不足以占满屏幕,需要手动给定宽度)*/
@property (nonatomic,assign) NSInteger displayCount;/**k线之间的距离*/
@property (nonatomic,assign) CGFloat candleSpace;/**k线的宽度 根据每页k线的根数和k线之间的距离动态计算得出*/
@property (nonatomic,assign) CGFloat candleWidth;/**k线最小高度*/
@property (nonatomic,assign) CGFloat minHeight;/**当前屏幕范围内绘制起点位置*/
@property (nonatomic,assign) CGFloat leftPostion;/**当前绘制的起始下标*/
@property (nonatomic,assign) NSInteger currentStartIndex;/**滑到最右侧的偏移量*/
@property (nonatomic,assign) CGFloat previousOffsetX;/**当前偏移量*/
@property (nonatomic,assign) CGFloat contentOffset;@property (nonatomic,assign) BOOL kvoEnable;/**长按手势返回对应model的相对位置@param xPostion 手指在屏幕的位置@return 距离手指位置最近的model位置*/
- (CGPoint)getLongPressModelPostionWithXPostion:(CGFloat)xPostion;- (void)stockFill;
- (void)calcuteCandleWidth;
- (void)updateWidth;
- (void)drawKLine;

绘图基本思路

  1. 所有的绘制在UIView上面,UIView底层是一个ScrollView
  2. 设置K线之间的间距与可视区域想要显示的K线个数,动态计算出K线的宽度。之所以没有直接设置K线宽度,是为了保证每次滑动的时候,屏幕内总是占满整数倍的K线个数。
  3. 通过k线的个数,计算出当前View的与它的父视图ScrollView的宽度
  4. KVO监听ScrollView的contentOffset属性,计算每次滑动将要显示的K线数组(currentDisplayArray)
  5. 计算currentDisplayArray的最大值与最小值,然后得出每一根K线对应屏幕的坐标,绘图

链接

[ZYWStock]https://github.com/zyw113/ZYWStock.git

  • 在使用过程中如果遇到什么问题,欢迎给我简书留言,或者直接Pull request,欢迎star or fork。
  • 更多功能,敬请期待~~~

iOS 股票K线图绘制相关推荐

  1. iOS 股票K线图、分时图

    前言:以下是博主2016年在做iOS研发时,在某书上发的,搬到CSDN上来,后续会将当时构建的思考逻辑发上来. iOS 股票K线图.分时图,基本上翻遍了开源的项目,要不就是只分享了分时图没有k线纯粹一 ...

  2. 深度学习量化交易---0.1.股票K线图绘制

    究股票交易的基本功就是看K线图,所以在这一节里面,我们的任务就是拿到一支股票的历史数据,我们用python画出其K线图,这是进行下一步技术分析的基础. 我们以上证综指为例,之所以没拿某支股票为例,是因 ...

  3. IOS 股票K线图的实现

    2015-09-04 by 木易哥哥 智者精选,每天获取励志认知能量 www.5izhjx.com 写了lines.RKLineView.getData三个对象完成实现. 首先开始调用 rkLine ...

  4. 安卓股票K线图绘制三方库

    由于时间关系,只能在空余时间做,目前只做了MA,EMA,BOLL,MACD,KDJ 5个指标.并且没有扩展功能. 支持实时刷新的单条数据更新. 支持滑动时的分页加载更多数据. 支持惯性滑动. 支持多指 ...

  5. plotly基于dataframe数据绘制股票K线图并过滤非交易时间

    plotly基于dataframe数据绘制股票K线图并过滤非交易时间 #ohlc过滤非交易时间: import plotly as py # 导入plotly库并命名为py import plotly ...

  6. 利用JFreeChart绘制股票K线图

    因为工作的需要,接触了一些股票图形绘制类的工作,其中最主要的还是股票K线图的绘制了,如果利用编程语言最底层的图形绘制方法去绘制这类图形,如果对编程语言不是特别熟悉的话,一般是有很大的困难的,通过在网上 ...

  7. Python绘制股票K线图

    目录 1 股票K线图知识了解 2 用Python绘制股票K线图 2.1 安装绘制K线图的mpl_finance库 2.2 引入相关库 2.3 用Tushare库获取股票基本数据 2.4 日期格式调整及 ...

  8. 利用 python numpy +matplotlib 绘制股票k线图

    一.python numpy + matplotlib 画股票k线图 # -- coding: utf-8 -- import requests import numpy as np from mat ...

  9. PyQT绘制股票K线图

    本文介绍如何使用PyQtGraph绘制类似东方财富PC软件上的K线图,我们要绘制的K线图包括蜡烛图.移动平均线.交易量柱状图.KDJ(或其它指标)曲线.十字光标.前后翻页等可视化功能,一图胜千言,先上 ...

最新文章

  1. 一堆让人惊喜的实用工具,也许你还不知道
  2. java学习-http中get请求的非ascii参数如何编码解码探讨
  3. iOS xocde编译报错 NSObjCRuntime.h
  4. 第七节:Trigger(SimpleTrigger、CronTrigger)哑火(MisFire)策略 :
  5. 局域网内搭建Android SDK更新源
  6. 如何使用SMART原则
  7. ie浏览器怎么打开html,IE浏览器无法打开网页如何解决
  8. 数据库升级造成的X_$BH状态异常问题
  9. 乐优商城项目实战视频教程
  10. Python数据分析理论与实战完整版本
  11. vscode 添加版权信息
  12. js字符转换成分数_JavaScript实现分数显示
  13. 很强大,并且易于使用,更重要的是免费的一个分区工具:分区助手
  14. Oracle DB 备份和恢复的概念
  15. 找出并打印1至1000以内的质数
  16. QQ空间首页模仿制作——HTML布局练习
  17. 【经验】漫画中人物手臂怎么画?
  18. 干掉AlibabaProtect【windows10】
  19. IT30: IT人怎样成为解决问题的高手
  20. 聊一聊汽车智能座舱测试团队的管理与具体实施

热门文章

  1. 数据结构与C语言精髓(逐步完善)
  2. 规则引擎Ilog Jrules开发基础教程【连载1】-- 概述篇
  3. Katalon Studio Enterprise 8.5 Crack-New
  4. 操作系统第三章:银行家算法
  5. python画城堡_Python 13 简单项目-堡垒机
  6. Python字符串操作大全(一)
  7. SAP 寄售业务的标准流程
  8. 【Linux】信息显示命令
  9. C语言-结构体与共用体
  10. 电子劳动合同如何签订才能生效呢?四步就能教会你!