内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

iOS股票K线图绘制详解

2018-05-15 16:42 出处:清屏网 人气: 评论(0

写在开头

最近造了个轮子,绘制股票的k线图。刚开始接收到这个需求的时候真的一脸懵逼,因为没有接触过相关知识。

不过经过研究,其实还是很好理解的,这里稍微科普一下K线图吧。所有的K线图都是由一个个的蜡烛图组成的,蜡烛图是这样子的

不难看出,我们只需要知道最高价,最低价,开盘价,收盘价就可以画出一个完整的蜡烛图了。每一个蜡烛图对应一个时间,以时间为横坐标,价格为纵坐标,就可以组成一个简易的K线图。

我这里除了K线图以外,底部加入了柱状图用来查看所选时间的交易量,K线图图中加入了MA5,MA10,MA20的日均线。

完整的科普可以看这里:K线图科普 - 百度经验

最后的效果

因为做成gif图,颜色和流畅度都有点问题,实际上体验是非常流畅的,感觉不到任何卡顿。

使用方法

使用很简单,先创建HSStockChartModelGroup实例,该实例是整个表的数据源,然后创建好HSStockChartView,赋值上数据源,最后reloadData即可。

示例代码

HSStockChartModelGroup * group = [HSStockChartModelGroup alloc] init];
 //此处array为HSStockChartModel数组,需要时间,开盘价,收盘价,最高价,最低价,出货量,日均线数据会自动算出
group.chartModelArray = array; 
self.chartView.modelGroup = group;
[self.chartView reloadData];

HSStockChartView提供了一个delegate

@protocol HSStockChartViewDelegate <NSObject>

- (void)chartViewNeedLoadNewData:(HSStockChartView *)chartView complete:(void (^)(NSArray * array))complete;

@end

这个协议是用来刷新数据的,每当用户往前滑动到当前给出数据的一半时,这个协议方法就会调用,需要给出新的数据源。在滑动时加载新的数据源已经做过了处理,用户感受不到任何加载数据的痕迹,体验上来看非常流畅。

原理解析

为了能有一个流畅的滑动体验,整个View层的结构我是这样设计的。

底层是一个ScrollView,然后在ScrollView上add一个ContainerView,最后其他的K线图柱状图之类的都绘制在ContainerView上。

ScrollView主要是提供左右滑动的手势,而不是为了放大缩小,如果直接使用scrollView自带的放大缩小,会把Vertical方向也放大了,不能达到我们的要求。采用的方式是添加pinch手势在ContainerView上。另外要说的一点是,绘制图形采用的是CAShapeLayer绘制,节约内存,并且做了只创建和绘制屏幕内能见到的图形的优化,极大的提升了操作体验。要达到这一点要求,需要在做滑动放大等改变时,进行实时计算屏幕内包含哪些图形。

最后

惯例,放上 HSStockChartView 的链接,喜欢的点个star吧。

分享给小伙伴们:
本文标签: iOS股票K线图

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号