首页 >iOS开发

iOS股票K线图绘制

2019-01-08 10:56 编辑: 米米狗 分类:iOS开发 来源:Msoso

写在开头

最近造了个轮子,绘制股票的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吧。

搜索CocoaChina微信公众号:CocoaChina
微信扫一扫
订阅每日移动开发及APP推广热点资讯
公众号:
CocoaChina
我要投稿   收藏文章
上一篇:[性能优化]DateFormatter轻度优化探索

相关资讯

我来说两句
发表评论
您还没有登录!请登录注册
所有评论(0

综合评论

相关帖子

sina weixin mail 回到顶部