2011-11-19 23 views
15

Voglio disegnare rettangolo pieno nella vista viewContoller. Ho scritto sotto il codice in viewDidLoad. Ma non c'è alcun cambiamento. Cosa c'è che non va?Come disegnare un rettangolo?

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

per favore, per questa ** domanda estremamente vecchia **, ho inserito la risposta moderna, 2018 – Fattie

risposta

41

Non è possibile farlo in una viewController. È necessario estendere la vista e aggiungere il codice sotto "drawRect:"

ciò modificherà la logica di disegno della 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 per la risposta corretta - anche se non ignorerei il parametro CGRect di drawRect .... – Till

+0

Giusto, Immagino che una soluzione migliore sia quella di verificare prima che l'area che deve essere ridisegnata faccia parte del rettangolo, e solo allora lo faccia. –

+0

Cosa intendi per visualizzazione estesa? – charly

2

Non è possibile eseguire il rendering direttamente in viewDidLoad; sono le opinioni stesse che dovrebbero eseguire questo nel loro metodo drawRect.

Il modo più semplice per "disegnare" un rettangolo è posizionare un UIView con un bordo di sfondo & nella vista. (È possibile impostare il confine attraverso metodi di CALayer della vista cioè myView.layer.borderColor = [[UIColor redColor] CGColor];.)

1

Solo per chiarezza:

Se è necessario disegnare un rettangolo che ha lo stesso riempimento e il colore del bordo, quindi è possibile sostituire:

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

con:

[[UIColor redColor] set]; 
0

moderna 2018 soluzione ..

override func draw(_ rect: CGRect) { 

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

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

questo è tutto.

Problemi correlati