iOS[UIKit框架]UIBezierPath篇(2)

使用UIBezierPath(我们通常叫贝塞尔曲线)类可以创建基于矢量的路径,这个类在UIKit中。此类是Core Graphics框架关于path的一个封装。使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线段组成的形状。
矢量:又称向量,指有大小又有方向的量。
标量:标量是只有大小,没有方向的量。
UIBezierPath是OC语言的,相对于Core Graphics来说更为平易近人,其次它能够使用ARC,如果我们直接使用CGPathRef的话,还要自己负责在合适的时候释放。
=============================

一、UIBezierPath基础
UIBezierPath对象是CGPathRef数据类型的封装。path如果是基于矢量形状的,都用直线和曲线段去创建。我们使用直线段去创建矩形和多边形,使用曲线段去创建弧(arc),圆或者其他复杂的曲线形状。每一段都包括一个或者多个点,绘图命令定义如何去诠释这些点。每一个直线段或者曲线段的结束的地方是下一个的开始的地方。每一个连接的直线或者曲线段的集合成为subpath。一个UIBezierPath对象定义一个完整的路径包括一个或者多个subpaths。
创建和使用一个path对象的过程是分开的。创建path是第一步,包含一下步骤:
(1)创建一个Bezier path对象。
(2)使用方法moveToPoint:去设置初始线段的起点。
(3)添加line或者curve去定义一个或者多个subpaths。
(4)改变UIBezierPath对象跟绘图相关的属性。

二、UIBezierPath.h中的基本属性说明
见 iOS[UIKit框架]UIBezierPath篇(1)

三、UIBezierPath的简单使用
1、利用UIBezierPath画一条直线
代码如下:


iOS[UIKit框架]UIBezierPath篇(2)_第1张图片
31DDCC56-BB82-4FBF-9BFE-4BE9C39B9CAD.png

2、画一个三角形


iOS[UIKit框架]UIBezierPath篇(2)_第2张图片
98831741-5962-4C08-A4E6-3CAAAEEEFF80.png

3.画一个矩形
iOS[UIKit框架]UIBezierPath篇(2)_第3张图片
F6445802-84A2-42F0-8999-F81A25AE6FEA.png

4.画一个矩形的内切圆
iOS[UIKit框架]UIBezierPath篇(2)_第4张图片
AF019B51-01FC-4D9E-BBC6-2AAD35504CD9.png

5.画一个椭圆


A95EB498-0B5D-47D3-A393-7CD3BF837E84.png

6.画一个四个角都是圆角的矩形
8DFAC2CF-2E1D-4F97-AF46-29A3ABC2CD68.png

7.画一个其中两个角都是圆角的矩形
CED98E22-DAC2-4FA7-9EAA-0A976ECF9CEF.png

8.画一个弧线
iOS[UIKit框架]UIBezierPath篇(2)_第5张图片
3BD788AA-1B67-4164-98EA-28B15CDD587E.png

9.绘制二次贝塞尔曲线
iOS[UIKit框架]UIBezierPath篇(2)_第6张图片
49EA44FB-AD50-43FB-95A3-6F779C395DBB.png

10.绘制三次贝塞尔曲线
iOS[UIKit框架]UIBezierPath篇(2)_第7张图片
4395194C-08C3-4A74-B25F-E442F84D6D59.png

11.使用Core Graphics函数去修改path

UIBezierPath类只是CGPathRef数据类型和path绘图属性的一个封装。虽然通常我们可以用UIBezierPath类的方法去添加直线段和曲线段,UIBezierPath类还提供了一个属性CGPath,我们可以用来直接修改底层的path data type。如果我们希望用Core Graphics 框架函数去创建path,则我们要用到此属性。
有两种方法可以用来修改和UIBezierPath对象相关的path。可以完全的使用Core Graphics函数去修改path,也可以使用Core Graphics函数和UIBezierPath函数混合去修改。第一种方法在某些方面相对来说比较容易。我们可以创建一个CGPathRef数据类型,并调用我们需要修改path信息的函数。
(1).赋值一个新的CGPathRef给UIBezierPath对象。


iOS[UIKit框架]UIBezierPath篇(2)_第8张图片
3C8DF84D-C2BC-4ABF-A8F6-7A837A09BD26.png

(2).如果我们使用Core Graphics函数和UIBezierPath函数混合方法,我们必须小心的移动path 信息在两者之间。因为UIBezierPath类拥有自己底层的CGPathRef data type,我们不能简单的检索该类型并直接的修改它。相反,我们应该生成一个副本,然后修改此副本,然后赋值此副本给CGPath属性
iOS[UIKit框架]UIBezierPath篇(2)_第9张图片
F6B4433B-CD0B-4E24-B251-9B2F6B2066E1.png

12.rendering(渲染)Bezier Path对象的内容。
当创建一个UIBezierPath对象之后,我们可以使用它的stroke和fill方法在current graphics context中去渲染它。在调用这些方法之前,我们要进行一些其他的任务去确保正确的绘制path。
使用UIColor类的方法去stroke和fill想要的颜色。设置形状在目标视图中的位置。如果我们创建的path相对于原点(0,0),则我们可以给current drawing context应用一个适当的affie transform。例如,我想drawing一个形状起始点在(0,0),我可以调用函数CGContextTranslateCTM,并指定水平和垂直方向的translation值为10。调整graphic context相对于调整path对象的points是首选的方法,因为我们可以很容易的保存和撤销先前的graphics state。更新path对象的drawing 属性。当渲染path时,UIBezierPath实例的drawing属性会覆盖graphics context下的属性值
iOS[UIKit框架]UIBezierPath篇(2)_第10张图片
E7AC80C0-0206-4FDE-94CB-1C23221A6695.png

你可能感兴趣的:(iOS[UIKit框架]UIBezierPath篇(2))