博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS:使用贝塞尔曲线绘制图表(折线图、柱状图、饼状图)
阅读量:6079 次
发布时间:2019-06-20

本文共 1829 字,大约阅读时间需要 6 分钟。

1.介绍:

 UIBezierPath :画贝塞尔曲线的path类

 UIBezierPath定义 : 贝赛尔曲线的每一个顶点都有两个控制点,用于控制在该顶点两侧的曲线的弧度。

 曲线的定义有四个点:起始点、终止点(也称锚点)以及两个相互分离的中间点。

 滑动两个中间点,贝塞尔曲线的形状会发生变化。

 UIBezierPath :对象是CGPathRef数据类型的封装,可以方便的让我们画出 矩形 、 椭圆 或者 直线和曲线的组合形状

 

 初始化方法:

 + (instancetype)bezierPath;

 //创建一个矩形

 + (instancetype)bezierPathWithRect:(CGRect)rect;

 //创建圆形或者椭圆形

 + (instancetype)bezierPathWithOvalInRect:(CGRect)rect;

 + (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius; // rounds all corners with the same horizontal and vertical radius

 + (instancetype)bezierPathWithRoundedRect:(CGRect)rect byRoundingCorners:(UIRectCorner)corners cornerRadii:(CGSize)cornerRadii;

 + (instancetype)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise;

 + (instancetype)bezierPathWithCGPath:(CGPathRef)CGPath;

 

 2.最基本的使用方法是:

 //设置描绘的起点

 - (void)moveToPoint:(CGPoint)point;

  //画直线

 - (void)addLineToPoint:(CGPoint)point;

 //画曲线

 (1)绘制二次贝塞尔曲线   分别对应终点和一个控制点

 - (void)addQuadCurveToPoint:(CGPoint)endPoint controlPoint:(CGPoint)controlPoint

 (1)绘制三次贝塞尔曲线   分别对应终点和两个控制点

 - (void)addCurveToPoint:(CGPoint)endPoint controlPoint1:(CGPoint)controlPoint1 controlPoint2:(CGPoint)controlPoint2;

 //画圆弧

 - (void)addArcWithCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise

 

 3.使用贝塞尔曲线的基本步骤是:

    (1)创建一个Bezier path对象。

   (2)使用方法moveToPoint:去设置初始线段的起点。

   (3)添加line或者curve去定义一个或者多个subpaths。

   (4)改变UIBezierPath对象跟绘图相关的属性。

 

 4.demo演示如下:

创建一个工具类,BezierCurveView,同时给它创建一个xib文件,它继承自UIView,用来专门绘制图表的画布

BezierCurveView.h

 
View Code

BezierCurveView.m

 
View Code

在ViewController.m文件中测试如下:

 
View Code

演示截图如下:

 

 

下载地址:

Github:

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/5694749.html
,如需转载请自行联系原作者
你可能感兴趣的文章
【Cloud Foundry 应用开发大赛】“八卦街”后台管理系统
查看>>
ice版本resize 错误调试(Host key verification failed)
查看>>
http://fulinweiyang.iteye.com/
查看>>
php ssh2
查看>>
状态码
查看>>
Git合并多个 Commit
查看>>
结合Spring和Groovy解决脚本热加载
查看>>
【实战Java高并发程序设计 3】带有时间戳的对象引用:AtomicStampedReference
查看>>
SpringMVC内部跳转与重定向
查看>>
oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包...
查看>>
基础代码随笔
查看>>
如何实现SVN导出某段时间修改过的文件;自动将class文件部署到服务器中;重启服务器...
查看>>
PropertyUtils、BeanUtils的copyProperties()和set、get性能比较
查看>>
2014-11-10 关于C# 如何获取本地电脑的UTC时区
查看>>
Ceph的基本情况进行概要介绍
查看>>
MySQL数据库优化思路之配置文件优化
查看>>
分享纯 nginx 防御代码 nginx safe.conf
查看>>
Python-求素数程序
查看>>
如何去掉ECSHOP meta标签中的版本号
查看>>
【重构与模式】6.3 用Factory封装类
查看>>