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. ola.hallengren的SQL Server维护脚本

    ola.hallengren的SQL Server维护脚本 下载地址 http://files.cnblogs.com/files/lyhabc/ola.hallengrenMaintenanceSo ...

  2. 企业IT管理员IE11升级指南【15】—— 代理自动配置脚本

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  3. CSharpGL(26)在opengl中实现控件布局/渲染文字

    CSharpGL(26)在opengl中实现控件布局/渲染文字 效果图 如图所示,可以将文字.坐标轴固定在窗口的一角. 下载 CSharpGL已在GitHub开源,欢迎对OpenGL有兴趣的同学加入( ...

  4. ABP(现代ASP.NET样板开发框架)系列之12、ABP领域层——工作单元(Unit Of work)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之12.ABP领域层——工作单元(Unit Of work) ABP是“ASP.NET Boilerplate Pr ...

  5. Failed to stop iptables.service: Unit iptables.service not loaded.

    redhat 7 [root@lk0 ~]# service iptables stop Redirecting to /bin/systemctl stop iptables.service Fai ...

  6. Android Studio2.1.2 Java8环境下引用Java Library编译出错

    转载请注明出处:http://www.cnblogs.com/LT5505/p/5685242.html 问题:在Android Studio2.1.2+Java8的环境下,引用Java Librar ...

  7. Android Studio 轻松整理字符串到string.xml中

    昨天了解了Alt+Enter快捷键的大用处,今天又发现了一个快捷的方法,必须记下来.转载请注明出处http://www.cnblogs.com/LT5505/p/5466630.html 1.首先代码 ...

  8. 【PRINCE2是什么】PRINCE2认证之七大主题(1)

    进入第一个主题,PRINCE2商业论证:PRINCE2指出,商业论证就是进行判断是否值得对项目进行投资,值不值的问题.PRINCE2的商业论证有四个 在项目开始时,开发商业论证.在整个项目生命周期中, ...

  9. iOS中数据库应用基础

    iOS 数据库入门 一.数据库简介 1.什么是数据库? 数据库(Database) 是按照数据结构来组织,存储和管理数据的仓库 数据库可以分为2大种类 关系型数据库(主流) PC端 Oracle My ...

  10. Java内存模型深度解析:总结--转

    原文地址:http://www.codeceo.com/article/java-memory-7.html 处理器内存模型 顺序一致性内存模型是一个理论参考模型,JMM和处理器内存模型在设计时通常会 ...