2010-03-26 19 views
18

Estoy subclasificando una UIView y sobrescribiendo el método drawRect. Me doy cuenta de que el drawrect de la vista solo se invoca cuando la vista se carga por primera vez. Después de eso nunca se llama nuevamente. ¿Cómo me aseguro de que se llame después de un cambio de orientación? Intenté llamar a setNeedsDisplay en la vista antes y después de la rotación y eso no funciona.iPhone SDK: cómo desencadenar drawRect en la subclase UIView después del cambio de orientación?

Respuesta

57
[myView setContentMode:UIViewContentModeRedraw]; 

Puede configurar esto en IB, así (es decir, de modo ajustado en "redibujar")

+1

Esta es la forma preferida. – yuji

+0

Ver la respuesta del autor original a continuación. setNeedsDisplay es de hecho la llamada al método correcto. –

+3

'setNeedsDisplay:' se usa cuando desea desencadenar programáticamente un redibujado. Cuando desee cambios de orientación para desencadenar un redibujado, 'setContentMode:' es el ticket. – wcochran

8

Esto era un error relacionado con algo completamente diferente. setNeedsDisplay hace de hecho llamar a drawRect.

+0

Sí 'setNeedsDisplay:' activará un redibujado, pero requiere que el programador lo invoque explícitamente. 'setContentMode: 'activará automágicamente un redibujado en un cambio de orientación. – wcochran

0

Para responder a esta y las otras 94.000 preguntas semejantes sobre las vistas de rotación/funkiness drawRect,

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