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的基本用法,用好了将是绘制图形的又一利器。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2015-10-14 最简单也最难——如何获取到Android控件的高度
2015-10-14 Android新增API之AudioEffect中文API与应用实例
2013-10-14 Android之动态改变控件大小
2013-10-14 android适配各种分辨率的问题