2011-11-19 26 views
15

Quiero dibujar un rectángulo relleno en la vista de mi viewContoller. Escribí el código siguiente en viewDidLoad. Pero no hay cambio. ¿Qué pasa?Cómo dibujar un rectángulo?

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

tenga en cuenta, para esta ** pregunta muy antigua **, He puesto en la respuesta moderna, 2018 – Fattie

Respuesta

41

No se puede hacer en un control de vista. Necesita extender su Vista y agregar el código en "drawRect:"

Esto cambiará la lógica de dibujo de su vista.

-(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); 
} 
+2

+1 para la respuesta correcta, aunque no ignoraría el parámetro CGRect de drawRect .... – Till

+0

Derecha, Supongo que una mejor solución es verificar primero que el área que necesita volver a dibujarse es parte del rectángulo, y solo entonces hágalo. –

+0

¿Qué quiere decir extender la vista? – charly

2

No se puede procesar directamente en viewDidLoad; son las vistas mismas las que deberían ejecutar esto en su método drawRect.

La manera más fácil de "dibujar" un rectángulo es colocar un UIView con un borde de color de fondo & en su vista. (Se puede establecer la frontera a través de métodos de CALayer de la vista, es decir myView.layer.borderColor = [[UIColor redColor] CGColor];.)

1

Sólo para mayor claridad:

Si necesita dibujar un rectángulo que tiene el mismo relleno y color del borde, a continuación, se puede reemplazar:

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

con: solución

[[UIColor redColor] set]; 
0

moderna 2018 ..

override func draw(_ rect: CGRect) { 

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

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

eso es todo.

Cuestiones relacionadas