效果图是这样的:

关键是在

基本策略 是描点 和 连线。

折线基础版本,我找到网上的第三方,UUChart 。 特点是朴素,简单,扩展性强。

效果图重点是在折线要有阴影,于是 重点 放在 折线发散的阴影 和 拆解第三方 整理出符合需求的面向对象良好的折线模型。

一 拆解:

分三个文件 HFChart,HFChartLineView,HFChartConst

HFChart : 折线视图控制器角色  控制展示数值范围,颜色,横线 等 必要UI 元素展示规则

HFChartConst : 折线需要展示的一些静态参数 比如 45设定为行间距 就可以设置在 Const 里面。

HFChartLine:  主要是实施绘制 描点 连线 和 绘制我们需要的阴影

二 阴影

说是阴影,实际 是颜色的渐变。

(1)之前 思考方向  这个阴影 是两点之间的连线 发散出来的, 就是这个执拗思路莫名把问题难度加大。因为 折线的若干个点,相邻 每两个点之间的连线都要有阴影 那么阴影方向? 阴影重叠? 等问题怎么解决? 越想越复杂

(2)从颜色渐变考虑

创建渐变图层,根据折线点,mask遮罩区域,剩下的渐变图层放在视图背景图上 就是阴影啦。有没有一种豁然开朗的感觉?

举例子:

(2.1)绘制渐变图层:CAGradientLayer  是用来绘制渐变图层的工具,作为关键字可以搜索到很多参考资料

    //实现背景渐变
//初始化我们需要改变背景色的UIView,并添加在视图上
self.theView = [[UIView alloc] initWithFrame:CGRectMake(0, 64, [UIScreen mainScreen].bounds.size.width, self.view.hf_width)];
[self.view addSubview:self.theView];
//初始化CAGradientlayer对象,使它的大小为UIView的大小
self.gradientLayer = [CAGradientLayer layer];
self.gradientLayer.frame = self.theView.bounds;
//将CAGradientlayer对象添加在我们要设置背景色的视图的layer层
[self.theView.layer addSublayer:self.gradientLayer];
//设置渐变区域的起始和终止位置(范围为0-1)
//不设置默认从上到下渐变,如果使用startPoint endPoint 就是右下角对角线 方向渐变 也可以自定义方向
// self.gradientLayer.startPoint = CGPointMake(0, 0);
// self.gradientLayer.endPoint = CGPointMake(1, 1);
//设置颜色数组(我写的是白色的渐变)
CGColorRef color1 = [UIColor colorWithWhite:1.000 alpha:0.7].CGColor;
CGColorRef color2 = [UIColor colorWithWhite:1.000 alpha:0.0].CGColor;
[_gradientLayer setColors:@[(__bridge id)color1,(__bridge id)color2]];//设置颜色分割点(范围:0-1)
self.gradientLayer.locations = @[@(0.0f), @(0.9f)];

效果图如下:(为了看清楚 白色的渐变遮罩 我选择了醒目的 紫色做背景色)

(2.2) 在知道已知点集(有序点 折点顺序)合添加遮罩方法

//给渐变层设置 mask 属性
{
// 设置只显示一个三角形范围的渐变色
UIBezierPath *shapeLayerPath = [[UIBezierPath alloc] init];
// 点的坐标是相对于渐变层的
[shapeLayerPath moveToPoint:CGPointMake(0,self.view.hf_width)];//第一个点
[shapeLayerPath addLineToPoint:CGPointMake(self.view.hf_width/2, 0)];//第二个点
[shapeLayerPath addLineToPoint:CGPointMake(self.view.hf_width, self.view.hf_width)];//第三个点
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = shapeLayerPath.CGPath;
self.gradientLayer.mask = shapeLayer;
}

效果图:

三 剩下的就是组织自己的折线模型结构了 已经是很简单了有没有?

整理HFChart HFChartConst HFChartLine 给 HFChartLine 添加遮罩 完成

参考 :

1 . https://github.com/ZhipingYang/UUChartView

2.http://www.jb51.net/article/79948.htm

iOS 绘制漂亮的折线图的更多相关文章

  1. IOS绘制渐变背景色折线图的一种尝试

    1.绘制折线图 上次在群里看到一个折线图划的很漂亮,自己想实现一个这样的 ,但是一直没什么头绪,不知道怎么做,就开始在网上查找划线,绘 制渐变色这一块的内容,用最笨的方式,自己尝试的写了一些,也没 有 ...

  2. 利用pandas读取Excel表格,用matplotlib.pyplot绘制直方图、折线图、饼图

    利用pandas读取Excel表格,用matplotlib.pyplot绘制直方图.折线图.饼图 数据: 折线图代码: import  pandas  as pdimport  matplotlib. ...

  3. iOS:使用贝塞尔曲线绘制图表(折线图、柱状图、饼状图)

    1.介绍: UIBezierPath :画贝塞尔曲线的path类 UIBezierPath定义 : 贝赛尔曲线的每一个顶点都有两个控制点,用于控制在该顶点两侧的曲线的弧度. 曲线的定义有四个点:起始点 ...

  4. [canvas]利用canvas绘制自适应的折线图

    前段时间学习了用canvas绘制折现图,且当画布变换大小,折现图会随之变化,现附上代码 <!DOCTYPE html> <html lang="en"> & ...

  5. C# 绘制统计图(柱状图, 折线图, 扇形图)【转载】

    统计图形种类繁多, 有柱状图, 折线图, 扇形图等等, 而统计图形的绘制方法也有很多, 有Flash制作的统计图形, 有水晶报表生成统计图形, 有专门制图软件制作, 也有编程语言自己制作的:这里我们用 ...

  6. C# 绘制统计图(柱状图, 折线图, 扇形图)

    统计图形种类繁多, 有柱状图, 折线图, 扇形图等等, 而统计图形的绘制方法也有很多, 有Flash制作的统计图形, 有水晶报表生成统计图形, 有专门制图软件制作, 也有编程语言自己制作的:这里我们用 ...

  7. IOS使用Core-Plot画折线图

    关于Core-Plot的配置.大家能够參考我的上一篇博客:http://1.wildcat.sinaapp.com/?p=99 版权全部.转载请注明原文转自:http://blog.csdn.net/ ...

  8. VS2010 使用TeeChart画图控件 - 之二 - 绘制图形(折线图,柱状图)

    1.前期准备 详细可见VS2010 使用TeeChart画图控件 - 之中的一个 控件和类的导入 1. 1 加入TeeChart控件,给控件加入变量m_TeeChart 加入TeeChart控件,右击 ...

  9. Python使用matplotlib模块绘制多条折线图、散点图

    用matplotlib模块 #!usr/bin/env python #encoding:utf-8 ''' __Author__:沂水寒城 功能:折线图.散点图测试 ''' import rando ...

随机推荐

  1. iOS开发正则表达式的学习

    正则表达式笔记 每天的一小步,知道我在不断进步,这就是我每天的小目标. 这是我的第一篇博客,在工作之余,我会努力地留下些许脚印. 我是一名iOS开发者,对于iOS我仅仅只是一个菜鸟,愿意在此处留下我的 ...

  2. spring+redis+nginx 实现分布式session共享

    1,spring 必须是4.3以上版本的 2,maven配置 添加两个重要的依赖 <dependency> <groupId>org.springframework.sessi ...

  3. Redis入门经典——The Little Redis Book (翻译)

    The Little Redis Book By Karl Seguin 关于本书:本书全然免费下载.你能够任意转载,复制.但请你注明作者.Karl Seguin.译者,WY. 以及不要用于商业用途. ...

  4. imx6 uboot启动流程分析

    参考http://blog.csdn.net/skyflying2012/article/details/25804209 这里以imx6平台为例,分析uboot启动流程对于任何程序,入口函数是在链接 ...

  5. 记录下push推送优化改进点

    一)自主研发的push服务的特点及优势: 1) 消息回执确认(ack); 2) 有效期推送(设置消息的有效期); 3) 精准推送(设置设备组别推送); 4) 下发任务分解(拆分任务,多进程); 5) ...

  6. GoogleMap-------manifest文件配置

    前言:在使用GoopleMap之前需要配置manifest文件 1.这个可有可无,com.xhm.meishi是项目的包名 <!-- 声明调用这个应用需要的权限 --> <permi ...

  7. python 推荐算法

    每个人都会有这样的经历:当你在电商网站购物时,你会看到天猫给你弹出的“和你买了同样物品的人还买了XXX”的信息:当你在SNS社交网站闲逛时,也会看到弹出的“你可能认识XXX“的信息:你在微博添加关注人 ...

  8. wifidog 认证

    首先简介一下什么是Portal认证.Portal认证.通常也会叫Web认证.未认证用户上网时,设备强制用户登录到特定站点,用户能够免费訪问当中的服务.当用户须要使用互联网中的其他信息时,必须在门户站点 ...

  9. jodis遇到的问题

    1. Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper java找jar ...

  10. 基于ormlite创建数据库存储数据案例

    一直不知道安卓创建数据库存储数据,以前遇到过,但是没有深入研究,今天仔细的看了一下,学习到了一点知识 直接看代码了 public class DatabaseHelper extends OrmLit ...