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

简介

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中还有很多更加神奇的应用,有兴趣的同学可以研究一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html缩进快捷键_Windows IDEA 快捷键终极大全,果断收藏!

作者:JaJian出处:https://www.cnblogs.com/jajian/p/8012603.html话说IDEA对新手来说难,可能其中一个原因就是快捷键组合多而且复杂但是它也很全,基本所有功能都可以通过快捷键来完成,可以这么说,如果你掌握…

linux远程登录 密钥,使用密钥认证机制远程登录Linux

密钥认证机制创建存放key的文件1)创建目录 /root/.ssh 并设置权限[rootlocalhost ~]# mkdir /root/.ssh mkdir 命令用来创建目录,以后会详细介绍,暂时只了解即可。[rootlocalhost ~]# chmod 700 /root/.ssh chmod 命令是用来修改文件属性权限的&#xff…

python的pyqt5_Pycharm+Python+PyQt5使用详解

1,打开cmd安装PyQt5pip install pyqt52,PyQt5不再提供Qt Designer等工具,所以需要再安装pyqt5-toolspip install pyqt5-tools3,打开Pycharm,进入设置,添加外部工具4,添加QtDesigner,…

安装quartus时弹出错误_Win10 安装arcgis10.2 for desktop需要.net framework 解决方案

有效解决“Win10 安装arcgis10.2 for desktop需要microsoft.net framework 3.5 sp1或等效环境”。台式电脑新装了系统,重新安装arcgis 10.2时弹出“安装arcgis10.2 for desktop需要microsoft.net framework 3.5 sp1或等效环境 ”。在网上百度了很多的相关知识&#…

Linux_ppc下软件包安装,Linux下软件包安装详解

一、概述现在Linux上软件的安装方式有多种,有源码包编译,软件包管理器,软件包管理器前端工具,通用二进制编译等。源码包,优点是,灵活性和可定制性比较好,缺点是,技术要求高&#xff…

部编版是什么版本_部编版是人教版吗

部编版是人教版吗2019-09-07 17:06:05文/陶凯月部编版不是人教版,部编版教材由教育部组织编写,而人教版即由人民教育出版社出版。下面是小编整理的内容,供大家参考。什么是部编版教材部编版教材由教育部组织编写,2016年&#xff0…

下面哪个字段是http请求中必须具备的_HTTP 协议报文结构及示例

HTTP 基本架构下面我们用一张简单的流程图来展示 HTTP 协议基本架构,以便大家先有个基本的了解Web Client 可以是浏览器、搜索引擎、机器人等等一切基于HTTP 协议发起 http 请求的工具。Web Server 可以是任何的能解析 HTTP 请求,并返回给Web Client 可识…

文件名为空linux,文件系统:隐匿在Linux背后的机制

原标题:文件系统:隐匿在Linux背后的机制在 Linux 中,最直观、最可见的部分就是 文件系统(file system) 。下面我们就来一起探讨一下关于 Linux 中国的文件系统,系统调用以及文件系统实现背后的原理和思想。这些思想中有一些来源于…

xshell怎么让程序后台运行_使程序在Linux下后台运行

我们计算的程序都是周期很长的,通常要几个小时甚至一个星期。我们用的环境是用putty远程连接到日本Linux服务器。所以使程序在后台跑有以下三个好处:1:我们这边是否关机不影响日本那边的程序运行。(不会像以前那样,我们这网络一断…

docker安装elasticsearch_Elasticsearch amp; Kibana 部署安装 (Docker)

为什么要使用 Docker来部署 Elasticsearch 和 Kibana 呢,传统使用软件在操作系统上安装和配置的方法过于繁琐,并且受一些跨平台的约束,例如Mac、Windows、Linux等,所以无论安装什么软件,通过 Docker 进行部署是最为简单…

linux 多域名访问数据库,Linux下虚拟域名的实现

目前Linux操作系统十分火爆,所以很多朋友希望了解一下Linux下虚拟域名的实现过程。下面就基于目前比较流行的RedHat来讨论一下。一、DNS服务器的设置我们知道互联网网是基于TCP/IP协议的,要进行通信必须获得对方的IP地址,这是通过DNS服务器来…

mfc 对话框透明 控件不透明_你不知道的丨透明胶用法

家家都有的透明胶带,而它的作用不仅仅是用来粘东西。别看它是这么小小一块,可是作用却很多。平时我们穿的衣服,裤子难免会粘上些毛。在我们紧急出门的时候,突然发现衣服粘有毛,这时候我们的透明胶就派上用场了。用透明…

sscanf取固定长度的int_sscanf函数用法详解-阿里云开发者社区

函数原型:Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );int scanf( const char *format [,argument]... );说明:sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源…

安卓盒子刷rec linux启动,ADB命令刷入recovery刷机

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼特点:需要手机获取Root权限,需掌握相关cmd命令和ADB命令;虽然命令不同, 但跟fastboot模式刷入方式类似 提示:①新手机未获取Root权限的在CMD命令行输入su后到手机上点击程…

python partial_Python--并行计算框架(pathos)

​应用python进行数据挖掘或计算时,往往需要遍历多种参数进行数据建模,而单次的建模或计算有时候非常耗时,这时候可以利用python的并行计算功能,加快计算速度。python能够应用并行计算的模块有多个multiprocessing、pathos等。其中…

linux mono apache2,如何利用Mono创建Apache+mono环境(2)

我决定用一种比较主流的linux系统来构建,运行Mono。一方面是因为我比较熟悉它,而另一方面的原因是我们内部的FTP服务器上已经有了一个DVD的iso格式的安装文件.没有一个下载点能下载完美的东西(注:我这里有疑问).你能猜到我选择的是什么吗? SuSE 9.2 Professional.我…

c# out关键字 vb_c# 关键字:ref 和 out

.NET Ref和Out关键字对于值类型。如果不使用ref /out则传递的只是这些值的COPY,使用了Ref和Out的效果就几乎和C中使用了指针变量一样。(传递的就是原值),它能够让你直接对原数进行操作,而不是对那个原数的Copy进行操作对于引用类型:如果不使用ref /out,因为传递的是…

endnote怎么改成中文版_毕业论文面对大量的参考文献标注,应该怎么办?(便捷整理的技巧和方法)...

毕业论文不同于一般的小论文,特别是硕士毕业论文或者博士毕业论文。一般的小论文就四五页,而硕士论文动辄五六十页,有的甚至七八十页,因此有些东西如果要人工的去修改,将是一件非常痛苦的事情,比如目录自动…

linux 多个cpu使用率,统计多台linux的CPU使用率

依赖于 paramiko 模块,python2 ,测试环境是在 rhel5,初学python,请大家指教;#!/usr/bin/python# -*- coding:utf8 -*-import paramikoimport refrom time import sleeplinux_info([ssoweb12,192.168.5.32],[ssoweb17,192.168.5.37…

typescript的类型描述_TypeScript类型声明书写详解

本文总结一下TypeScript类型声明的书写,很多时候写TypeScript不是问题,写类型就特别纠结,我总结下,我在使用TypeScript中遇到的问题。如果你遇到类型声明不会写的时候,多看看lodash的声明,因为lodash对数据…