最好的特点就是可以自定义路径,设置圆角和描边都很方便,以下为代码和效果,均在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 play
 
import UIKit
 
class 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 play
 
import UIKit
 
class 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 play
 
import UIKit
 
class 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来画圆角矩形、自定义多路径图形的更多相关文章

  1. nginx-1.12.0版本(编译安装)-自定义安装路径

    nginx-1.12.0版本(编译安装)-自定义安装路径 安装路径:/application/nginx-1.12.0 1.前期准备 安装编译需要的gcc和gcc-c++ yum install -y ...

  2. CKFinder 自定义文件路径扩展ConfigurationPathBuilder

    CKFinder 自定义文件路径扩展ConfigurationPathBuilder 打开config.xml当中可以看到如下配置 <basePathBuilderImpl>com.ckf ...

  3. tomcat 设定自定义图片路径

    1.问题 平常图片路径都是在项目目录下存放,都是ip地址+端口号+项目名+图片路径,因为项目需要要把图片从tomcat中分离出来,并且设置可以通过自定义地址访问自定义图片路径. 2.解决 在 tomc ...

  4. magento 自定义url路径 和 filter data 小结

    背景是往一个第三方的搜索插件里面加入filter功能. 首先是路径,插件自己定义了一个router,类似于cms.那首先说说router好了,从入口一路追查的话,会发现最后进入的是Mage_Core_ ...

  5. Nginx 核心配置-自定义日志路径及清空日志注意事项

    Nginx 核心配置-自定义日志路径及清空日志注意事项 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.关于日志清空注意事项 1>.nginx服务写访问日志是基于acces ...

  6. Flink FileSink 自定义输出路径——StreamingFileSink、BucketingSink 和 StreamingFileSink简单比较

    接上篇:Flink FileSink 自定义输出路径——BucketingSink 上篇使用BucketingSink 实现了自定义输出路径,现在来看看 StreamingFileSink( 据说是S ...

  7. Flink FileSink 自定义输出路径——BucketingSink

    今天看到有小伙伴在问,就想着自己实现一下. 问题: Flink FileSink根据输入数据指定输出位置,比如讲对应日期的数据输出到对应目录 输入数据: 20190716 输出到路径 20190716 ...

  8. Swift之UIBezierPath

    使用UIBezierPath可以创建基于矢量的路径.使用此类可以定义简单的形状,如椭圆.矩形或者有多个直线和曲线段组成的形状等.主要用到的该类的属性包括 moveToPoint: //设置起始点 ad ...

  9. 使用CAShapeLayer和UIBezierPath画一个自定义半圆弧button

    通常我们使用系统自带的UIButton时,一般都是Rect矩形形式的,或则美工给出一张半圆弧的按钮,如图为一张半圆加三角形的按钮,而此时,如果给按钮添加点击事件时,响应事件依然为矩形区域,不符合我们的 ...

随机推荐

  1. JavaScript Type Conversion

    Data Types 5 Data Types string, number, boolean, object, function 3 Object Types object, array, date ...

  2. Mono 之 Jexus

    Jexus web server for linux 是运行在Linux上的Web服务器.其安装和部署及其简单,直接支持Asp.net . 下载Jexus wget http://linux.j66. ...

  3. iconfont阿里妈妈前端小图标使用方法详解

    图标选购网址:http://www.iconfont.cn/ 1.从阿里妈妈网站选购好小图标,加入购物车,下载好文件: 2.把字体文件放入字体(font)文件夹(tff)(woff),(eot) 3. ...

  4. 個人最近做的最多的重複工作就是excel导出

    //导出事件,这个是有合并动态列的 double num1 = 0, num2 = 0, num3 = 0; protected void btnExcel_Click(object sender,  ...

  5. MYSQL数据库性能调优之四:解决慢查询--索引

    为什么索引能够提高查询速度?没有索引 检索数据的方式是从头到尾一条一条挨着匹配,这是慢的根本原因:索引类型BTREE:二叉树类型,原理图如下:对表创建一个二叉树,记录中间数据的物理磁盘地址,二叉树检索 ...

  6. java线性表学习笔记(一)

    线性表是一种按顺序储存数据是的常用结构,大多数的线性表都支持以下的典型操作: 从线性表提取插入删除一个数据: 找出线性表中的某一个元素: 找出线性表中的元素: 确定线性表中是否包含某一个元素,确定线性 ...

  7. ubuntu官方源列表网址

    http://wiki.ubuntu.org.cn/%E6%BA%90%E5%88%97%E8%A1%A8 (推荐台湾的源)

  8. [iOS微博项目 - 3.3] - 封装网络请求

    github: https://github.com/hellovoidworld/HVWWeibo   A.封装网络请求 1.需求 为了避免代码冗余和对于AFN框架的多处使用导致耦合性太强,所以把网 ...

  9. 我对CONTAINING_RECORD宏的详细解释

    宏CONTAINING_RECORD的用处其实还是相当大的, 而且很是方便, 它的主要作用是: 根据结构体中的某成员的指针来推算出该结构体的指针! 下面从一个简单的例子开始说起: 我们定义一个结构体, ...

  10. 使用struts2实现文件上传

    action中 private File file;//文件 private String fileFileName;//文件名字 固定格式name+FileName private String f ...