charly
charly

Reputation: 167

How to draw a rectangle?

I want to draw a filled rectangle in my viewContoller's view. I wrote the code below in viewDidLoad. But there is no change. What is wrong?

CGRect rectangle = CGRectMake(0, 100, 320, 100);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0);
CGContextFillRect(context, rectangle);

Upvotes: 15

Views: 36247

Answers (4)

Fattie
Fattie

Reputation: 12287

modern 2018 solution..

override func draw(_ rect: CGRect) {

    let r = CGRect(x: 5, y: 5, width: 10, height: 10)

    UIColor.yellow.set()
    UIRectFill(r)
}

that's it.

Upvotes: 6

Guntis Treulands
Guntis Treulands

Reputation: 4762

Just for clarity:

If You need to draw a rectangle which has the same fill and border color, then You can replace:

CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0);

with:

 [[UIColor redColor] set];

Upvotes: 4

Jesse Rusak
Jesse Rusak

Reputation: 57188

You can't render directly in viewDidLoad; it's the views themselves that would have to run this in their drawRect method.

The easiest way to "draw" a rectangle is to place a UIView with a background color & border in your view. (You can set the border via the view's CALayer's methods. i.e. myView.layer.borderColor = [[UIColor redColor] CGColor];)

Upvotes: 3

Guy Ephraim
Guy Ephraim

Reputation: 3520

You can't do it in a viewController. You need to extend your View and add the code under "drawRect:"

this will change the drawing logic of your view.

-(void) drawRect:(CGRect)rect{    
[super drawRect:rect];  
    CGRect rectangle = CGRectMake(0, 100, 320, 100);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
    CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0);
    CGContextFillRect(context, rectangle);
}

Upvotes: 46

Related Questions