简介

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

分析

首先我们先看一下,UIBezierPath有哪些重要的属性:

1、 [color set]设置颜色,color为创建的UIColor对象

2、 [path stroke]填充view的线条的颜色,与[color set]配合使用 ,

3、 [path fill]填充整个view内部的颜色,与[color set]配合使用。

4、 path.lineWidth = 5.0; 这个很好理解了,就是划线的宽度

5、 path.lineCapStyle 这个线段起点是终点的样式,这个样式有三种:

kCGLineCapButt

kCGLineCapRound

kCGLineCapSquare

6、 path.lineJoinStyle 这个属性是用来设置两条线连结点的样式,同样它也有三种样式供我们选择

kCGLineJoinMiter 直接连接

kCGLineJoinRound 圆滑衔接

kCGLineJoinBevel 斜角连接

使用

接下来,我们就看一下UIBezierPath到底应该怎么使用:

首先,我们先自定义一个UIView的子类,然后重写- (void)drawRect:(CGRect)rect 方法,将创建图形的方法写到该方法中,下面是一些简单的示例:

画多边形

UIBezierPath* aPath = [UIBezierPath bezierPath];

aPath.lineWidth = 15.0;

/*

kCGLineCapButt,

kCGLineCapRound,

kCGLineCapSquare

*/

aPath.lineCapStyle = kCGLineCapButt ; //终点(起点)样式

/*

kCGLineJoinMiter,

kCGLineJoinRound,

kCGLineJoinBevel

*/

aPath.lineJoinStyle = kCGLineJoinBevel; //拐点样式

[aPath moveToPoint:CGPointMake(150, 30)];//设置起始点

[aPath addLineToPoint:CGPointMake(250, 70)];//途经点

[aPath addLineToPoint:CGPointMake(210, 170)];//途经点

[aPath addLineToPoint:CGPointMake(90, 170)];//途经点

[aPath addLineToPoint:CGPointMake(50, 70)];//途经点

[aPath closePath];//通过调用closePath方法得到最后一条线

UIColor *strokeColor = [UIColor redColor];

[strokeColor set];

[aPath stroke];//设置线条颜色

UIColor *fillColor = [UIColor blueColor];

[fillColor set];

[aPath fill];//填充

多边形.png

如果是创建四边形可直接使用:

UIBezierPath* aPath = [UIBezierPath bezierPathWithRect:CGRectMake(100, 100, 100, 100)];

画圆

UIBezierPath *aPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(100, 100, 200, 100)];

aPath.lineWidth = 5.0;

aPath.lineCapStyle = kCGLineCapRound; //线条拐角

aPath.lineJoinStyle = kCGLineCapRound; //终点处理

UIColor *color = [UIColor redColor];

[color set];

[aPath stroke];

弧形.png

如果要画正圆,将rect的width和height设置为相等的值即可。

画弧形

/*

ArcCenter: 原点

radius: 半径

startAngle: 开始角度

endAngle: 结束角度

clockwise: 是否是顺时针方向

*/

UIBezierPath* aPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(200, 300)

radius:80

startAngle:0

endAngle:pi

clockwise:NO];

aPath.lineWidth = 5.0;

aPath.lineCapStyle = kCGLineCapRound; //线条拐角

aPath.lineJoinStyle = kCGLineCapRound; //终点处理

UIColor *color = [UIColor redColor];

[color set]; //设置线条颜色

[aPath stroke];

圆形.png

画二次曲线

UIBezierPath* aPath = [UIBezierPath bezierPath];

aPath.lineWidth = 5.0;

aPath.lineCapStyle = kCGLineCapRound; //线条拐角

aPath.lineJoinStyle = kCGLineCapRound; //终点处理

[aPath moveToPoint:CGPointMake(100, 100)];//设置初始点

//终点 controlPoint:切点(并不是拐弯处的高度,不懂的同学可以去看三角函数)

[aPath addQuadCurveToPoint:CGPointMake(200, 100) controlPoint:CGPointMake(150, 50)];

UIColor *color = [UIColor redColor];

[color set];

[aPath stroke];

二次曲线.png

画三次曲线

UIBezierPath *path2 = [UIBezierPath bezierPath];

path2.lineWidth = 5.0;

path2.lineCapStyle = kCGLineCapRound;

path2.lineJoinStyle = kCGLineJoinRound;

[path2 moveToPoint:CGPointMake(0, 100)];

[path2 addCurveToPoint:CGPointMake(100, 100) controlPoint1:CGPointMake(25, 50) controlPoint2:CGPointMake(75, 150)];//两个切点

UIColor *color = [UIColor redColor];

[color set];

[path2 stroke];

三次曲线.png

以上便是iOS中UIBezierPath最基本的使用方法了,在平时的开发中,我们经常将UIBezierPath与CALayer配合使用,下面是一个简单的例子:

//创建CAShapeLayer对象

CAShapeLayer *shapeLayer = [CAShapeLayer layer];

shapeLayer.frame = CGRectMake(100, 100, 200, 200);//设置shapeLayer的尺寸和位置

shapeLayer.fillColor = [UIColor clearColor].CGColor;//填充颜色为ClearColor

//设置线条的宽度和颜色

shapeLayer.lineWidth = 1.0f;

shapeLayer.strokeColor = [UIColor redColor].CGColor;

//创建一个圆形贝塞尔曲线

UIBezierPath *aPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 200, 200)];

//将贝塞尔曲线设置为CAShapeLayer的path

shapeLayer.path = aPath.CGPath;

//将shapeLayer添加到视图的layer上

[self.view.layer addSublayer:shapeLayer];

shapeLayer.png

总结:

到此为止,关于UIBezierPath最基本的使用就介绍完了,但是关于UIBezierPath在iOS中还有很多更加神奇的应用,有兴趣的同学可以研究一下。

ios 贝塞尔曲线 颜色填充_iOS贝塞尔曲线(UIBezierPath)的基本使用方法相关推荐

  1. ios 贝塞尔曲线 颜色填充_iOS,贝塞尔曲线(UIBezierPath)

    UIBezierPath简介 使用UIBezierPath类可以创建基于矢量的路径,这个类在UIKit中.此类是Core Graphics框架关于path的一个封装, UIBezierPath对象是C ...

  2. ios 贝塞尔曲线 颜色填充_IOS 贝塞尔曲线(UIBezierPath)属性、方法整理

    IOS 贝塞尔曲线详解 开发IOS的朋友都知道IOS 贝塞尔曲线的重要性,由于经常会用到这样的东西,索性抽时间就把相应所有的属性,方法做一个总结. UIBezierPath主要用来绘制矢量图形,它是基 ...

  3. ios 贝塞尔曲线 颜色填充_iOS UIBezierPath贝赛尔曲线详解

    UIBezierPath是在画图,定制动画轨迹中都有应用. UIBezierPath主要用来绘制矢量图形,它是基于Core Graphics对CGPathRef数据类型和path绘图属性的一个封装,所 ...

  4. ios 贝塞尔曲线 颜色填充_PS的3D颜色深度映射到球体模拟天线

    接着上次的→→EXCEL利用贝塞尔函数模拟天线3D方向图 一.用EXCEL尝试绘制成类似下面极坐标的方向图 还是先从2D入手 把X轴扩展到XY平面,先尝试用20×20个点来试一下 利用下面的代码批量单 ...

  5. ios重签名shell脚本_IOS应用重签名(三种方法)

    终端命令(相关的一些指令) •$security find-identity -v -p codesigning列出钥匙串里可签名的证书 •$Codesign–fs"证书串"文件名 ...

  6. 【HTML 中的二次贝塞尔曲线 和三次贝塞尔曲线】(使用说明详解)

    二次 贝塞尔曲线 和三次 贝塞尔曲线 使用说明 1. 二次 贝塞尔曲线 和三次 贝塞尔曲线 1.1 贝塞尔曲线的 基本知识 1.2 贝塞尔曲线 生成动图 1.3 HTML 中 画贝塞尔曲线的 2 种方 ...

  7. html5贝塞尔曲线,Canvas学习:贝塞尔曲线

    在绘制圆和圆弧一节中,了解到在Canvas中可以使用arc()和arcTo()绘制制圆或弧线,但很多时候,仅这两个方法还不能满足我们实际的需求,特别是绘制复杂的曲线.不过值得庆幸的是,在Canvas中 ...

  8. Bézier曲线 和 Bézier曲面 ( 贝塞尔曲线 和 贝塞尔曲面 )

    Bézier曲线 定义 给定空间n+1个点的位置矢量Pi(i=0,1,2-),则Bezier参数曲线上各点坐标的插值公式是:P(t)=∑i=0nPiBi,n(t),t∈[0,1]P(t)=\sum_{ ...

  9. android 贝塞尔曲线_OpenGL 实践之贝塞尔曲线绘制

    说到贝塞尔曲线,大家肯定都不陌生,网上有很多关于介绍和理解贝塞尔曲线的优秀文章和动态图. 以下两个是比较经典的动图了. 二阶贝塞尔曲线: 三阶贝塞尔曲线: 由于在工作中经常要和贝塞尔曲线打交道,所以简 ...

最新文章

  1. Java 18 要来了,你不会还在用Java 8吧?
  2. 【数据库复习】第一章绪论
  3. cmd非运行完再保存,结果显示保存同时进行
  4. 201671010406 丁家辉《英文文本统计分析》结对项目报告
  5. internet网络 checksum校验和计算方法
  6. redis安装redis集群
  7. win7电脑更改不了分辨率的解决方法
  8. 十大“史上最佳”自动化测试工具
  9. vb6实现union数据结构_Redis数据结构与对象编码解析
  10. 设计模式(十四):适配器模式
  11. Python Sklearn.metrics 简介及应用示例(机器学习各种评价指标)
  12. 开博第一篇:一个关于正则表达式相关的问题
  13. java物业管理系统描述,基于java小区物业管理系统.doc
  14. STM32RBT6+RC522读取CPU卡demo
  15. 京东、京东全球购、考拉等电商平台入驻费用详解
  16. 2021/4/29刷题
  17. 接收输入的一行字符,统计出字符串包含数字的个数 2、编写一个程序,计算字符串中子串出现的次数 3、请输入星期几的第1个字母,用来判断是星期几,如果第1个字母一样,则继续判断第2个字母,依次类推。
  18. 解决 input 输入框在 iOS 系统中无法输入内容
  19. Java基础day2【谷】
  20. JQuery基础教程:入门

热门文章

  1. mysql的exp平方_MySQL EXP()用法及代码示例
  2. Python基础:获取迭代器下一项目的常见操作
  3. duilib消息事件产生和分发解释
  4. NFS服务器原理、搭建、配置
  5. 编译和使用APUE的源码
  6. Arthas 思维导图笔记
  7. linux下能运行python,(转)Linux下运行python
  8. C++学习之路 | PTA乙级—— 1019 数字黑洞 (20分)(精简)
  9. redis取出list最边的一个_六、Redis列表(list)类型参考记录(1)
  10. 外设驱动库开发笔记16:MS5536C压力变送器驱动