Search code examples
iosswiftdrawing

How to draw a simple rounded rect in swift (rounded corners)


I managed to draw a rect :-) But I don't know how to draw a rounded rect.

Can someone help me out with the following code how to round the rect?

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);

Solution

  • //Put this code in ur drawRect

    Objective - 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()
    
    }