如何在swift(圆角)中绘制一个简单的圆角矩形

时间:2015-05-21 08:47:03

标签: ios swift drawing

我设法绘制了一个矩形:-)但我不知道如何绘制圆角矩形。

有人可以帮我解决以下代码如何围绕矩形吗?

let canvas = UIGraphicsGetCurrentContext()
rec = CGRectMake(0, 0, 40, 40);

//var maskPath = UIBezierPath(roundedRect: rec, byRoundingCorners: .BottomLeft | .BottomRight, cornerRadii: CGSize(width: 3, height: 3))

CGContextAddRect(canvas, rec);
CGContextFillPath(canvas);

6 个答案:

答案 0 :(得分:17)

//将此代码放入ur drawRect

目标 - C

 - (void)drawRect:(CGRect)rect
{

CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);


 CGPathRef clippath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(x,y, width, height) cornerRadius:6].CGPath;
CGContextAddPath(ctx, clippath);

CGContextSetFillColorWithColor(ctx, self.color.CGColor);

CGContextClosePath(ctx);
CGContextFillPath(ctx);

[self.color set];


[_path closePath]; // Implicitly does a line between p4 and p1
[_path fill]; // If you want it filled, or...
[_path stroke]; // ...if you want to draw the outline.
CGContextRestoreGState(ctx);
}

Swift 3

func drawRect(rect : CGRect)
{
// Size of rounded rectangle
let rectWidth = rect.width
let rectHeight = rect.height

// Find center of actual frame to set rectangle in middle
let xf:CGFloat = (self.frame.width  - rectWidth)  / 2
let yf:CGFloat = (self.frame.height - rectHeight) / 2

let ctx: CGContext = UIGraphicsGetCurrentContext()!
ctx.saveGState()

let rect = CGRect(x: xf, y: yf, width: rectWidth, height: rectHeight)
let clipPath: CGPath = UIBezierPath(roundedRect: rect, cornerRadius: rectCornerRadius).cgPath

ctx.addPath(clipPath)
ctx.setFillColor(rectBgColor.cgColor)




ctx.closePath()
ctx.fillPath()
ctx.restoreGState()

}

答案 1 :(得分:16)

如何使用BezierPath

创建圆角矩形
 var roundRect = UIBezierPath(roundedRect: <CGRect>, byRoundingCorners: <UIRectCorner>, cornerRadii: <CGSize>)

或者有值的示例:

var roundRect = UIBezierPath(roundedRect: CGRectMake(0, 0, 100, 100), byRoundingCorners:.AllCorners, cornerRadii: CGSizeMake(16.f, 16.f))

答案 2 :(得分:13)

@muku Swift 4.x +

中回答
override func draw(_ rect: CGRect) {
  super.draw(rect)

  let clipPath = UIBezierPath(roundedRect: rect, cornerRadius: 6.0).cgPath

  let ctx = UIGraphicsGetCurrentContext()!
  ctx.addPath(clipPath)
  ctx.setFillColor(UIColor.red.cgColor)

  ctx.closePath()
  ctx.fillPath()
}

答案 3 :(得分:5)

SWIFT 3.x + 4.0 我修改了Swift 3的示例并添加了几行来集中UIView中的矩形

func roundRect()
{
    // Size of rounded rectangle
    let rectWidth:CGFloat = 100
    let rectHeight:CGFloat = 80

    // Find center of actual frame to set rectangle in middle
    let xf:CGFloat = (self.frame.width  - rectWidth)  / 2
    let yf:CGFloat = (self.frame.height - rectHeight) / 2

    let ctx: CGContext = UIGraphicsGetCurrentContext()!
    ctx.saveGState()

    let rect = CGRect(x: xf, y: yf, width: rectWidth, height: rectHeight)
    let clipPath: CGPath = UIBezierPath(roundedRect: rect, cornerRadius: rectCornerRadius).cgPath

    ctx.addPath(clipPath)
    ctx.setFillColor(rectBgColor.cgColor)




    ctx.closePath()
    ctx.fillPath()
    ctx.restoreGState()

}

带有屏幕截图的完整代码可在以下网址找到:http://lab.dejaworks.com/uiview-with-rounded-background-designable-in-storyboard/

Designable UIView with Rounded Rectangle Background

答案 4 :(得分:3)

override func draw(_ rect: CGRect) {

    let bezierPath = UIBezierPath(roundedRect: CGRect(x: 0, y: 0, width: 40.0, height: 40.0), cornerRadius: 3.0)
    UIColor.yellow.setFill()
    bezierPath.fill()

}

答案 5 :(得分:2)

雨燕4

iOS 11

override func draw(_ rect: CGRect) {
    super.draw(rect)

    let context = UIGraphicsGetCurrentContext()!
    context.saveGState()
    defer { context.restoreGState() }

    let path = UIBezierPath(roundedRect: rect, 
                            byRoundingCorners: [.topLeft, .topRight],
                            cornerRadii: CGSize(width: 4, height: 4))

    context.addPath(path.cgPath)
    context.closePath()

    context.setStrokeColor(UIColor.red.cgColor)
    context.strokePath()
}