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 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来画圆角矩形、自定义多路径图形的更多相关文章
- 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矩形形式的,或则美工给出一张半圆弧的按钮,如图为一张半圆加三角形的按钮,而此时,如果给按钮添加点击事件时,响应事件依然为矩形区域,不符合我们的 ...
随机推荐
- 七牛云实现js上传
七牛云的官方API写的一塌糊涂.最主要的,还是版本兼容的问题. 一.引入文件 引入了两个文件: 1.jquery-1.10.2.min.js 2.plupload.full.min.js 3.qini ...
- Cubietruck查看CPU及硬盘温度
想看看我的Cubietruck的工作状态,尤其是CPU及硬盘温度如何. 网上推荐的都是使用 lm-sensors 查看电脑温度.但是尝试后无奈发现该软件不兼容我的 Cubietruck. 然后就发现外 ...
- javascript 作用域例子
for(var i=0,l=url1.length;i<l;i++){ var url = url1[i]; setTimeout(function(){ window.open(url); } ...
- gradle 及 git 环境下利用hook及gradle脚本自动添加versioncode和versionname的方法
在 app/build.gradle 文件里添加几行代码: def gitCommitShortHash = 'git log -1 --pretty=%h'.execute([], project. ...
- 转】Spark DataFrame小试牛刀
原博文出自于: https://segmentfault.com/a/1190000002614456 感谢! 三月中旬,Spark发布了最新的1.3.0版本,其中最重要的变化,便是DataFrame ...
- HDU 2101 A + B Problem Too 分类: ACM 2015-06-16 23:57 18人阅读 评论(0) 收藏
A + B Problem Too Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- oracle出现的小问题
oracle无法解析指定的标识符:检查oracle的数据库实例名是否正确. oracle增大db_files:alter system set db_files=1000 scope=spfile;之 ...
- POJ 3617 Best Cow Line (贪心)
题意:给定一行字符串,让你把它变成字典序最短,方法只有两种,要么从头部拿一个字符,要么从尾部拿一个. 析:贪心,从两边拿时,哪个小先拿哪个,如果一样,接着往下比较,要么比到字符不一样,要么比完,也就是 ...
- GC:垃圾回收器简介
Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK ...
- 我的Memcache学习笔记
一.编绎安装Memcached 二.Memcached基本命令 四.PHP扩展模块安装 五.设置session用memcache来存储 六.PHP使用Memcache的一致性哈希连接方式 七.Memc ...