标准对标雪球APPK线。
Z君这几天会将之前写的K线框架review,同时在简书也会将之前搭建K线遇到的问题,发出来,供大家参考,大家有什么疑问,可以直接留言,Z君每天都会给大家解答。
K线难点在于手势的处理上,捏合、长按、拖拽
都需要展示不同效果。以下是Z君当时做K线时遇到的问题的解决方案;
1. 捏合手势需要动态改变K线柱的宽度,对应的增加或减少当前界面K线柱的展示数量。
采用UITableView
类实现,将K线柱封装在cell
中,在tableview
中监听捏合手势,对应改变cell
的高度,同时刷新cell
中K线柱的布局来实现动态改变K线柱的宽度。
采用UITableView
还有一个好处就是可以采用cell
的重用机制降低内存。
注意:因为UITableView
默认是上下滑动,而K线柱是左右滑动,Z君这里将UITableView
做了一个顺时针90°的旋转。

2. K线柱绘制
K线柱采用CAShapeLayer
配合UIBezierPath
绘制,内存低,效率高,棒棒哒!
关于CAShapeLayer的使用大家可以看这篇 https://zsisme.gitbooks.io/ios-/content/chapter6/cashapelayer.html
(现在的google、baidu,好文章都搜不到,一搜全是简单调用两个方法就发的博客,还是翻了两年前的收藏才找到这个网站,强烈推荐大家)
3. 捏合时保证捏合中心点不变,两边以捏合中间点为中心进行收缩或扩散
因为UITableView
在改变cell
的高度时,默认时不会改变偏移量,所以不能保证捏合的中心点不变,这里我们的小学知识就会用上了。

我们可以通过变量定义控件间距离。

保证捏合中心点的中K线柱的中心点还在捏合前,就需要c1 = c2
,计算出O2
,在捏合完,设置偏移量为O2
即可。

4. K线其他线性指标如何绘制
在K线中除了K线柱之外,还有其他均线指标
,连贯整个数据显示区。

由图可以看出均线指标由每个cell
中心点的数据连接相邻的cell
中心点的数据。我们依旧将绘制放在cell
中,将相连两个cell
的线分割成两段,分别在各自所属的cell
中绘制。
需要我们做的就是就是在cell中传入相邻的cell
的soureData
,计算出相邻中点的位置,分为两段绘制。

大家针对K线有什么问题都可以在下面留言,会第一时间解答。
未完待续
网友评论