UIBezierPath主要用来绘制矢量图形,它是基于Core Graphics对CGPathRef数据类型和path绘图属性的一个封装,所以是需要图形上下文的(CGContextRef),所以一般UIBezierPath在drawRect中使用。

UIBezierPath的属性介绍:

1.CGPath:将UIBezierPath类转换成CGPath,类似于UIColor的CGColor

2.empty:只读类型,路径上是否有有效的元素

3.bounds:和view的bounds是不一样的,它获取path的X坐标、Y坐标、宽度,但是高度为0

4.currentPoint:当前path的位置,可以理解为path的终点

5.lineWidth:path宽度

6.lineCapStyle:path端点样式,有3种样式

  kCGLineCapButt:无端点

  kCGLineCapRound:圆形端点

  kCGLineCapSquare:方形端点(样式上和kCGLineCapButt是一样的,但是比kCGLineCapButt长一点)

    效果图:

    

7.lineJoinStyle:拐角样式

    kCGLineJoinMiter:尖角

  kCGLineJoinRound:圆角

  kCGLineJoinBevel:缺角

      效果图:

    

   

8.miterLimit:最大斜接长度(只有在使用kCGLineJoinMiter是才有效), 边角的角度越小,斜接长度就会越大

为了避免斜接长度过长,使用lineLimit属性限制,如果斜接长度超过miterLimit,边角就会以KCALineJoinBevel类型来显示

9.flatness:弯曲路径的渲染精度,默认为0.6,越小精度越高,相应的更加消耗性能。

10.usesEvenOddFillRule:单双数圈规则是否用于绘制路径,默认是NO。

11. UIRectCorner:角

  UIRectCornerTopLeft:左上角

  UIRectCornerTopRight:右上角

  UIRectCornerBottomLeft:左下角

  UIRectCornerBottomRight:右下角

  UIRectCornerAllCorners:所有四个角

UIBezierPath的方法介绍:

1.创建UIBezierPath对象:

  + (instancetype)bezierPath:

2.创建在rect内的矩形:

  + (instancetype)bezierPathWithRect:(CGRect)rect:

  参数:rect->矩形的Frame

3.创建在rect里的内切曲线:

  + (instancetype)bezierPathWithOvalInRect:(CGRect)rect:

  参数:rect->矩形的Frame

4.创建带有圆角的矩形,当矩形变成正圆的时候,Radius就不再起作用:

  + (instancetype)bezierPathWithRoundedRect:(CGRect)rect cornerRadius:(CGFloat)cornerRadius

  参数:rect->矩形的Frame

       cornerRadius->圆角大小   

5.设定特定的角为圆角的矩形:

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

  参数:rect->矩形的Frame

     corners->指定的圆角

     cornerRadii->圆角的大小

6.创建圆弧+ (instancetype)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise

  参数:center->圆点

     radius->半径

     startAngle->起始位置

     endAngle->结束为止

     clockwise->是否顺时针方向

  起始位置参考图:

      

7.通过已有路径创建路径:

  B+ (instancetype)bezierPathWithCGPath:(CGPathRef)CGPath

  参数:CGPath->已有路径

8.init方法:

  - (instancetype)init

9.initWiteCoder方法:

  - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder

10.转换成CGPath:

  - (CGPathRef)CGPath

11.移动到某一点:

  - (void)moveToPoint:(CGPoint)point

  参数:point->目标位置

12.绘制一条线:

  - (void)addLineToPoint:(CGPoint)point

  参数:point->目标位置

13.创建三次贝塞尔曲线:

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

  参数:endPoint->终点

     controlPoint1->控制点1

     controlPoint2->控制点2

  参照图:

    

14.创建二次贝塞尔曲线:

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

  参数:endPoint->终点

       controlPoint->控制点

  参照图:

     

15.添加圆弧:

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

  参数:参看创建圆弧

16.闭合路径,即在终点和起点连一根线:

  - (void)closePath;

17.清空路径:

  - (void)removeAllPoints;

18.追加路径:

  - (void)appendPath:(UIBezierPath *)bezierPath

  参数:bezierPath->追加的路径

19.扭转路径,即起点变成终点,终点变成起点:

  - (UIBezierPath *)bezierPathByReversingPath

20.路径进行仿射变换:

  - (void)applyTransform:(CGAffineTransform)transform;

  参数:transform->仿射变换

21.绘制虚线:

  - (void)setLineDash:(nullable const CGFloat *)pattern count:(NSInteger)count phase:(CGFloat)phase

  参数:pattern->C类型线性数据

       count->pattern中数据个数

     phase-> 起始位置

22.填充:

  - (void)fill

23.描边,路径创建需要描边才能显示出来:

  - (void)stroke;

24.设置描边颜色,需要在设置后调用描边方法:

  [[UIColor blackColor] setStroke];

25.设置填充颜色,需要在设置后调用填充方法

  [[UIColor redColor] setFill];

26.设置描边的混合模式:

  - (void)fillWithBlendMode:(CGBlendMode)blendMode alpha:(CGFloat)alpha

  参数:blendMode->混合模式

       alpha->透明度

27.设置填充的混合模式:

  - (void)strokeWithBlendMode:(CGBlendMode)blendMode alpha:(CGFloat)alpha;

  参数:blendMode->混合模式

       alpha->透明度

28.修改当前图形上下文的绘图区域可见,随后的绘图操作导致呈现内容只有发生在指定路径的填充区域

  - (void)addClip;

GitHub地址:https://github.com/Locking-Xu/UIBezierPath

本文转载  @Locking_Xu的博客

贝塞尔曲线(UIBezierPath)属性、方法汇总的更多相关文章

  1. 贝塞尔曲线UIBezierPath简单使用

    //常用属性 /* 1.CGPath: 将UIBezierPath类转换成CGPath 2.currentPoint: 当前path的位置,可以理解为path的终点 3.lineWidth: 线条宽度 ...

  2. iOS开发 贝塞尔曲线UIBezierPath(2)

    使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形 . 1:UIBezierPath: UIBezierPath是在 UIKit 中 ...

  3. iOS开发 贝塞尔曲线UIBezierPath(后记)

    使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形 . 1:UIBezierPath: UIBezierPath是在 UIKit 中 ...

  4. js如何操作表格(常用属性方法汇总)

    js如何操作表格(常用属性方法汇总) 一.总结 一句话总结: 二.表格相关的属性和方法 1.1 Table 对象集合 cells[] 返回包含表格中所有单元格的一个数组. 语法:tableObject ...

  5. iOS开发 贝塞尔曲线UIBezierPath

    最近项目中需要用到用贝塞尔曲线去绘制路径 ,然后往路径里面填充图片,找到这篇文章挺好,记录下来 自己学习! 转至 http://blog.csdn.net/guo_hongjun1611/articl ...

  6. Android中贝塞尔曲线的绘制方法

    贝塞尔曲线,很多人可能不太了解,什么叫做贝塞尔曲线呢?这里先做一下简单介绍:贝塞尔曲线也可以叫做贝济埃曲线或者贝兹曲线,它由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋.一般的矢量图形软件常 ...

  7. iOS贝塞尔曲线(UIBezierPath)的基本使用方法

    简介 UIBezierPath是对Core Graphics框架的一个封装,使用UIBezierPath类我们可以画出圆形(弧线)或者多边形(比如:矩形)等形状,所以在画复杂图形的时候会经常用到. 分 ...

  8. 通过UIBezierPath贝塞尔曲线画圆形、椭圆、矩形

    /**创建椭圆形的贝塞尔曲线*/ UIBezierPath *_ovalPath=[UIBezierPath bezierPathWithOvalInRect:CGRectMake(, , , )]; ...

  9. iOS开发 贝塞尔曲线

    iOS开发 贝塞尔曲线UIBezierPath - 陌云 时间 2014-03-14 11:04:00  博客园-所有随笔区 原文  http://www.cnblogs.com/moyunmo/p/ ...

  10. 基于CAShapeLayer和贝塞尔曲线的圆形进度条动画

    通过CAShapeLayer和贝塞尔曲线搭配的方法,创建的简单的圆形进度条的教程先简单的介绍下CAShapeLayer1,CAShapeLayer继承自CALayer,可使用CALayer的所有属性2 ...

随机推荐

  1. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  2. 说说DOM的那些事儿

    引子 先来一颗栗子: <img src="/sub/123.jpg" alt="test" /> <script type="tex ...

  3. Java中的Checked Exception——美丽世界中潜藏的恶魔?

    在使用Java编写应用的时候,我们常常需要通过第三方类库来帮助我们完成所需要的功能.有时候这些类库所提供的很多API都通过throws声明了它们所可能抛出的异常.但是在查看这些API的文档时,我们却没 ...

  4. AngularJs2与AMD加载器(dojo requirejs)集成

    现在是西太平洋时间凌晨,这个问题我鼓捣了一天,都没时间学英语了,英语太差,相信第二天我也看不懂了,直接看结果就行. 核心原理就是require在AngularJs2编译过程中是关键字,而在浏览器里面运 ...

  5. Visual Studio Code 使用Git进行版本控制

    Visual Studio Code 使用Git进行版本控制 本来认为此类教程,肯定是满网飞了.今天首次使用VS Code的Git功能,翻遍了 所有中文教程,竟没有一个靠谱的.遂动笔写一篇. 请确保你 ...

  6. 解析大型.NET ERP系统 权限模块设计与实现

    权限模块是ERP系统的核心模块之一,完善的权限控制机制给系统增色不少.总结我接触过的权限模块,以享读者. 1 权限的简明定义 ERP权限管理用一句简单的话来说就是:谁 能否 做 那些 事. 文句 含义 ...

  7. T-SQL检查停止的复制作业代理,并启动

        有时候搭建的复制在作业比较多的时候,会因为某些情况导致代理停止或出错,如果分发代理时间停止稍微过长可能导致复制延期,从而需要从新初始化复制,带来问题.因此我写了一个脚本定期检查处于停止状态的分 ...

  8. MVC 验证码实现( 简易版)

    现在网站上越来越多的验证码,使用场景也是越来越多,登陆.注册.上传.下载...等等地方,都有可能大量使用到验证码,那么制作验证码到底有多简单呢?我们一起来看下最简易版的验证码实现过程- 验证码的基本步 ...

  9. golang 使用 iota

    iota是golang语言的常量计数器,只能在常量的表达式中使用. iota在const关键字出现时将被重置为0(const内部的第一行之前),const中每新增一行常量声明将使iota计数一次(io ...

  10. iOS 保存、读取与应用状态

    固化 对于大多数iOS应用,可以将其功能总结为:提供一套界面,帮助用户管理特定的数据.在这一过程中,不同类型的对象要各司其职:模型对象负责保存数据,视图对象负责显示数据,控制器对象负责在模型对象与视图 ...