2013-06-18 14 views
7

voglio solo disegnare un semplice rettangolo per una vista utilizzando la seguente funzione:UIBezierPath semplice rettangolo

- (void)drawRect:(CGRect)rect { 
    [super drawRect:rect]; 
    if (self.drawTextBouble) { 
     [[UIColor blueColor] setFill]; 
     UIBezierPath *aPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(40, 0, 230, 120) cornerRadius:12.0]; 
     [aPath fill]; 
    } 
} 

Il codice di cui sopra si riempie la vista con sfondo nero pianura, al di fuori del rettangolo non è trasparente. Come posso risolvere questo?

Edit:

La soluzione qui di seguito funziona, ma questo sta lavorando anche:

[self setOpaque:NO]; 
+0

Questo è un esempio migliore di una domanda di quanto pensassi sarebbe stato. C'è un codice esistente, errato, la spiegazione del problema e il risultato desiderato. È un peccato che non conosca la risposta! –

+2

Non riesco a riprodurre il problema con il tuo codice, ma forse non dovresti chiamare '[super drawRect: rect]', confronta http://stackoverflow.com/questions/14074281/subclassed-uiview-shows-black-background-if -drawRect-è-sovrascritto. –

+0

grazie per i commenti :), ho provato ma si comporta allo stesso modo. – flatronka

risposta

9

È disegno codice è OK. Se si desidera la visualizzazione personalizzata disegnato per avere sfondo trasparente, è sufficiente impostare

self.backgroundColor = [UIColor clearColor]; 

in vista di - (id)initWithFrame:(CGRect)frame

Edit: Solo una piccola nota per quanto riguarda chiamando [super drawRect:rect]. UIView docs dice:

Se sottoclasse UIView direttamente, l'implementazione di questo metodo non ha bisogno di chiamare super-. Tuttavia, se stai sottoclassi una classe di visualizzazione diversa, dovresti chiamare super ad un certo punto della tua implementazione.

+0

grazie a questo sta funzionando, ho trovato una soluzione alternativa che funziona anche. – flatronka