介绍:html
这是以雪球APP为原型,基于iOS的K线开源项目。ios
该项目总体设计思路已经通过某成熟证券APP的商业认证。git
本项目将K线业务代码尽量缩减,保留核心功能,可流畅、高效实现手势交互。github
K线难点在于手势交互和数据动态刷新上,功能并不复杂,关键在于设计思路。布局
演示:网站
K线演示文档.gifgoogle
建议:设计
若是搭建K线为公司业务,不建议采用集成度高的开源代码。庞大臃肿,纵然短时间匆忙上线,难以应付后期灵活需求变动。htm
Objective-C版请移步https://github.com/cclion/CCLKLineChartView内存
Swift版请移步https://github.com/cclion/KLineView。
设计思路&&难点:
K线难点在于手势的处理上,捏合、长按、拖拽都须要展现不一样效果。如下是Z君当时作K线时遇到的问题的解决方案;
采用UITableView类实现,将K线柱封装在cell中,在tableview中监听捏合手势,对应改变cell的高度,同时刷新cell中K线柱的布局来实现动态改变K线柱的宽度。
采用UITableView还有一个好处就是能够采用cell的重用机制下降内存。
注意:由于UITableView默认是上下滑动,而K线柱是左右滑动,Z君这里将UITableView作了一个顺时针90°的旋转。
tableView旋转90°
K线柱采用CAShapeLayer配合UIBezierPath绘制,内存低,效率高,棒棒哒!
关于CAShapeLayer的使用你们能够看这篇https://zsisme.gitbooks.io/ios-/content/chapter6/cashapelayer.html
(如今的google、baidu,好文章都搜不到,一搜全是简单调用两个方法就发的博客,仍是翻了两年前的收藏才找到这个网站,强烈推荐你们)
由于UITableView在改变cell的高度时,默认时不会改变偏移量,因此不能保证捏合的中心点不变,这里咱们的小学知识就会用上了。
捏合时状态.png
咱们能够经过变量定义控件间距离。
捏合先后.png
保证捏合中心点的中K线柱的中心点还在捏合前,就须要c1 = c2,计算出O2,在捏合完,设置偏移量为O2便可。
计算偏移量.png
在K线中除了K线柱以外,还有其余均线指标,连贯整个数据显示区。
线性指标
由图能够看出均线指标由每一个cell中心点的数据链接相邻的cell中心点的数据。咱们依旧将绘制放在cell中,将相连两个cell的线分割成两段,分别在各自所属的cell中绘制。
须要咱们作的就是就是在cell中传入相邻的cell的soureData,计算出相邻中点的位置,分为两段绘制。
分割绘制
你们针对K线有什么问题均可以在下面留言,会第一时间解答
本文为第三方转载,原文连接:www.jianshu.com/p/104857287…
文章如有不对地方,欢迎批评指正,一个小而有用QQ交流群:805558511