2010-03-26 13 views
18

Sto sottoclassi un UIView e sovrascrivo il metodo drawRect. Sto notando che il drawrect della vista viene chiamato solo quando la vista viene caricata per la prima volta. Dopo questo non viene mai più chiamato. Come posso essere sicuro che venga chiamato dopo un cambio di orientamento? Ho provato a chiamare setNeedsDisplay sulla vista prima e dopo la rotazione e questo non lo fa.iPhone SDK: come attivare drawRect sulla sottoclasse UIView dopo il cambio di orientamento?

risposta

57
[myView setContentMode:UIViewContentModeRedraw]; 

È possibile impostare questo nel IB pure (vale a dire, la modalità impostata su "ridisegnare")

+1

Questo è il modo preferito. – yuji

+0

Vedere la risposta dell'autore originale qui sotto. setNeedsDisplay è davvero la giusta chiamata al metodo. –

+3

'setNeedsDisplay:' viene utilizzato quando si desidera attivare un ridisegno a livello di codice. Quando si desidera che le modifiche all'orientamento attivino un aggiornamento, 'setContentMode:' è il ticket. – wcochran

8

Questo era un bug relativo a qualcosa di completamente diverso. setNeedsDisplay causa infatti il ​​richiamo di drawRect.

+0

Sì 'setNeedsDisplay:' attiverà un nuovo aggiornamento, ma richiede al programmatore di invocarlo esplicitamente. 'setContentMode: 'attiverà automaticamente un ridisegno su un cambio di orientamento. – wcochran

0

Per rispondere a questa e le altre 94.000 domande la classica relative alla vista di rotazione/drawRect funky,

-(id)initWithFrame:(CGRect)frame 
{ 
    if(self=[super initWithFrame:frame]) { 
     self.autoresizesSubviews=YES; 
     self.autoresizingMask=UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; 
    } 
    return self; 
} 
Problemi correlati