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的基本用法,用好了将是绘制图形的又一利器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值