web-dev-qa-db-ja.com

長方形を描く方法は?

ViewContollerのビューに塗りつぶされた長方形を描画したい。私はviewDidLoadで以下のコードを書きました。しかし、変化はありません。なにが問題ですか?

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

ViewControllerでそれを行うことはできません。ビューを拡張し、「drawRect:」の下にコードを追加する必要があります。

これにより、ビューの描画ロジックが変更されます。

-(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);
}
43
Guy Ephraim

明確にするために:

同じ塗りつぶしと境界線の色を持つ長方形を描画する必要がある場合は、次のものを置き換えることができます。

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

と:

 [[UIColor redColor] set];
3

現代の2018ソリューション..

override func draw(_ rect: CGRect) {

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

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

それでおしまい。

3
Fattie

ViewDidLoadで直接レンダリングすることはできません。 drawRectメソッドでこれを実行する必要があるのはビュー自体です。

長方形を「描画」する最も簡単な方法は、背景色と境界線を使用してUIViewをビューに配置することです。 (ビューのCALayerのメソッドを使用して境界線を設定できます。つまり、myView.layer.borderColor = [[UIColor redColor] CGColor];

3
Jesse Rusak