折线的绘制

项目中实现的效果需求

  • 展示效果图:


    IMG_3424.PNG
  • 切换不同的按钮绘制不同的折线图
  • 当手指左右滑动的时候,展示点的数据
  • 在零点,可能存在负数,零点不是坐标Y轴坐标为1的时候
  • 每个点对应一个气泡视图,并且展示它数据

实现的思路

  • 首先是处理数据,让整个数组中最大的值为Y轴的顶点,最小的值为Y轴的0点(可能包含负数)
  • 因为绘制的点和左右上下都是有边距的,所有是两层视图,一次是整体的白色视图,一层是装载贝塞尔曲线的白色视图
  • 折线在每一次数据重新复制都要移除前面的点:
 // 删除重新绘制
    if (_linePath) {
        [_linePath removeAllPoints];
    }
  • 而每一个圆圈使用的是CAShaperLayer的数组去装载,去移除:
屏幕快照 2017-07-24 10.25.29.png
  • 绘制所有的点,是放在处理数组转换成点的循环中绘制的:
屏幕快照 2017-07-24 10.25.40.png
  • UIView继承的是UIResponder,所以主要的滑动实现依赖于下面的协议:
屏幕快照 2017-07-24 10.32.30.png
  • 协议中实现对气泡视图尖角的设置,项目实现是距离视图20pt,但是在左右两个极端的时候需要处理,避免尖角不在对应的点上

气泡视图

  • 气泡视图建议不要覆写drawRect,数据太多,不停的点击一下子内存就会疯长,容易崩溃

  • 使用贝塞尔曲线来绘制,从尖角开始,使用贝塞尔曲线绘制圆角和直线就可以了

  • 因为这个折线视图耦合在项目中了,所以就没有单独写成demo了,如果有需要可以直接交流

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 读书笔记 好词: 老弱病残 黑霜 衣衫褴褛 严严实实 遥遥应声 灰失失 精猾 灯塔社 ...
    指语阅读 1,057评论 0 0
  • 本视频为activiti工作流的web流程设计器整合视频教程 整合Acitiviti在线流程设计器(Activit...
    48abfca053b7阅读 219评论 0 0
  • 说好的,我要把树上的核桃 像坚硬的誓言一样亲手摘下来 说好的,我要把地里的土豆 往事一样,亲手洗尽它的尘埃 说好的...
    甘肃子溪阅读 230评论 2 4
  • 秋天来了 今年的秋天和往年一样如期而至。清晨上学的路上,看到行人已换上了厚实的秋衣,秋风吹过,不禁会缩一下头,...
    徐亚杰阅读 253评论 0 1
  • 2017-10-27游疗学习践行打卡第3次 鸟飞、鱼游、儿童游戏!透过游戏走进孩子的内心世界! 我...
    伞下姑娘阅读 189评论 0 0