Swift用UIBezierPath来画圆角矩形、自定义多路径图形
最好的特点就是可以自定义路径,设置圆角和描边都很方便,以下为代码和效果,均在playground中实现
1、首先实现一个圆角矩形,并对此路径描边,为其绘制一个轮廓。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//: Playground - noun: a place where people can playimport UIKitclass MyView : UIView{ override func drawRect(rect: CGRect) { var pathRect = UIEdgeInsetsInsetRect(self.bounds, UIEdgeInsetsMake(1, 1, 1, 1)) var path = UIBezierPath(roundedRect: pathRect, cornerRadius: 10) path.lineWidth = 4 UIColor.greenColor().setFill() UIColor.blackColor().setStroke() path.fill() path.stroke() }}let viewRect = CGRect(x: 0, y: 0, width: 100, height: 100)let myEmptyView = MyView(frame:viewRect) |

tips:所有绘制操作都是按照调用顺序进行的。在本段代码中,我在填充矩形后再对其进行描边。如果交换对path.fill()和path.stroke()的调用顺序,将会得到一个稍有不同的结果,绿色填充将会略微覆盖黑色描边,效果图如下。

2、下面自定义一条路径,确定几个点,然后像画笔一样连线!
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
//: Playground - noun: a place where people can playimport UIKitclass MyView : UIView{ override func drawRect(rect: CGRect) { var bezierPath = UIBezierPath() //创建一个矩形,它的所有边都内缩5% var drawingRect = CGRectInset(self.bounds, self.bounds.size.width*0.05, self.bounds.size.height*0.05) //确定组成绘画的点 var topLeft = CGPointMake(CGRectGetMinX(drawingRect), CGRectGetMinY(drawingRect)) var topRight = CGPointMake(CGRectGetMaxX(drawingRect), CGRectGetMinY(drawingRect)) var bottomLeft = CGPointMake(CGRectGetMinX(drawingRect), CGRectGetMaxY(drawingRect)) var bottomRight = CGPointMake(CGRectGetMaxX(drawingRect), CGRectGetMaxY(drawingRect)) var center = CGPointMake(CGRectGetMidX(drawingRect), CGRectGetMinY(drawingRect)) //开始绘制 bezierPath.moveToPoint(topLeft) bezierPath.addLineToPoint(topRight) bezierPath.addLineToPoint(bottomLeft) bezierPath.addCurveToPoint(bottomRight, controlPoint1: center, controlPoint2: center) //使路径闭合,结束绘制 bezierPath.closePath() //设定颜色,并绘制它们 UIColor.redColor().setFill() UIColor.blackColor().setStroke() bezierPath.fill() bezierPath.stroke() }}let viewRect = CGRect(x: 0, y: 0, width: 100, height: 100)let myEmptyView = MyView(frame:viewRect) |
3、多条子路径也可以。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
//: Playground - noun: a place where people can playimport UIKitclass MyView : UIView{ override func drawRect(rect: CGRect) { //创建一条空Bezier路径 let bezierPath = UIBezierPath() //为两个组成部分定义矩形 let squareRect = CGRectInset(rect, rect.size.width*0.45, rect.size.height*0.05) let circleRect = CGRectInset(rect, rect.size.width*0.3, rect.size.height*0.3) let cornerRadius : CGFloat = 20 //创建路径 let circlePath = UIBezierPath(ovalInRect: circleRect) let squarePath = UIBezierPath(roundedRect: squareRect, cornerRadius: cornerRadius) //将它们添加到主路径 squarePath.appendPath(circlePath) bezierPath.appendPath(squarePath) //设定颜色并绘制它们 UIColor.redColor().setFill() //绘制路径 bezierPath.fill() }}let viewRect = CGRect(x: 0, y: 0, width: 100, height: 100)let myEmptyView = MyView(frame:viewRect) |

以上就是UIBezierPath的基本用法,用好了将是绘制图形的又一利器。
Swift用UIBezierPath来画圆角矩形、自定义多路径图形的更多相关文章
- nginx-1.12.0版本(编译安装)-自定义安装路径
nginx-1.12.0版本(编译安装)-自定义安装路径 安装路径:/application/nginx-1.12.0 1.前期准备 安装编译需要的gcc和gcc-c++ yum install -y ...
- CKFinder 自定义文件路径扩展ConfigurationPathBuilder
CKFinder 自定义文件路径扩展ConfigurationPathBuilder 打开config.xml当中可以看到如下配置 <basePathBuilderImpl>com.ckf ...
- tomcat 设定自定义图片路径
1.问题 平常图片路径都是在项目目录下存放,都是ip地址+端口号+项目名+图片路径,因为项目需要要把图片从tomcat中分离出来,并且设置可以通过自定义地址访问自定义图片路径. 2.解决 在 tomc ...
- magento 自定义url路径 和 filter data 小结
背景是往一个第三方的搜索插件里面加入filter功能. 首先是路径,插件自己定义了一个router,类似于cms.那首先说说router好了,从入口一路追查的话,会发现最后进入的是Mage_Core_ ...
- Nginx 核心配置-自定义日志路径及清空日志注意事项
Nginx 核心配置-自定义日志路径及清空日志注意事项 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.关于日志清空注意事项 1>.nginx服务写访问日志是基于acces ...
- Flink FileSink 自定义输出路径——StreamingFileSink、BucketingSink 和 StreamingFileSink简单比较
接上篇:Flink FileSink 自定义输出路径——BucketingSink 上篇使用BucketingSink 实现了自定义输出路径,现在来看看 StreamingFileSink( 据说是S ...
- Flink FileSink 自定义输出路径——BucketingSink
今天看到有小伙伴在问,就想着自己实现一下. 问题: Flink FileSink根据输入数据指定输出位置,比如讲对应日期的数据输出到对应目录 输入数据: 20190716 输出到路径 20190716 ...
- Swift之UIBezierPath
使用UIBezierPath可以创建基于矢量的路径.使用此类可以定义简单的形状,如椭圆.矩形或者有多个直线和曲线段组成的形状等.主要用到的该类的属性包括 moveToPoint: //设置起始点 ad ...
- 使用CAShapeLayer和UIBezierPath画一个自定义半圆弧button
通常我们使用系统自带的UIButton时,一般都是Rect矩形形式的,或则美工给出一张半圆弧的按钮,如图为一张半圆加三角形的按钮,而此时,如果给按钮添加点击事件时,响应事件依然为矩形区域,不符合我们的 ...
随机推荐
- 常用SQL整理
整理了日常用到的一些sqls 1.插入表 insert into table_B select * from table_A 2.清空表 truncate table test #清空表,结构还存在d ...
- dispatch_once单例初始化
static GHCache *instance = nil; /** * 单例,静态初始化方法 * * @return 返回一个单例 */ + (GHCache*)shareCache{ sta ...
- win+r 快速启动应用程序
如何使用WIN+R快捷键快速启动应用程序呢?其实很简单 首先随便在一个盘上建一个新文件夹,随便取什么名字,最好是英文格式,小编以D盘为例,如图 2. 打开文件夹,单击右键,选择“新建”,单击“快捷方式 ...
- PHP强大的内置filter (二) 完
<?php #Sanitize filters #Sanitize filters 可以清理掉不规范的字符 # FILTER_SANITIZE_EMAIL 可以清理除了 字母和数字 以及 !#$ ...
- windows分屏
一.准备 主机.显示屏A.显示屏B.DVI连接线2根 二.操作步骤 1.使用DVI连接线将显示屏A连接到主机上,开机进入windows系统(演示用的是win 7)(若已连接,请跳到第2步.基本上这一步 ...
- Hadoop构成
What Is Apache Hadoop? The Apache™ Hadoop® project develops open-source software for reliable, scala ...
- AnnotationSessionFactoryBean用法介绍
http://blog.csdn.net/flyingfalcon/article/details/8273618 —————————————————————————————————————————— ...
- java.io.IOException: Messenger was closed
程序运行一段时间后抛出异常java.io.IOException: Messenger was closed,不知道是啥原因? ———————————————————————————————————— ...
- Azure中国版 制作镜像 捕捉镜像
因为项目需要需要部署多台功能一样的服务器,简单来说是多台nginx服务器.如果按照原始的做法,是新建vm,然后一台台部署相关服务. 现在Azrue已经可以通过捕获镜像的方式创建vm镜像模板,然后按照创 ...
- 咏南C/S开发框架支持最新的DELPHI XE8开发
特大好消息:咏南C/S开发框架支持最新的DELPHI XE8开发!咏南开发框架让你再无开发工具升级后顾之忧! 购买咏南开发框架送项目源码!