2011-05-22 19 views
5

Estoy haciendo algunas pruebas simples para agregar CALayer a UIView. En mi clase principal controlador de una aplicación para el iPhone 4, he implementado el método viewDidLoad como tal:iOS: self.view.bounds no llena toda la ventana

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSLog(@"%s", __PRETTY_FUNCTION__); 

    CALayer* ca = [[CALayer alloc] init]; 
    [ca setBounds:self.view.bounds]; 

    [ca setBackgroundColor:[[UIColor blueColor] CGColor]]; 

    [self.view.layer addSublayer:ca]; 
} 

El fondo azul sólo se ocupan 1/4 de la pantalla.

enter image description here

Me pregunto si es porque no tomaba en consideración pantalla de retina? ¿Cuál es la mejor práctica en esta situación?


Añadido estos mensajes de depuración:

NSLog(@"frame w:%f h:%f", self.view.frame.size.width, self.view.frame.size.height); 
NSLog(@"bounds w:%f h:%f", self.view.bounds.size.width, self.view.bounds.size.height); 

Salida:

frame w:320.000000 h:460.000000 
bounds w:320.000000 h:460.000000 
+0

¿Cuál es el valor de 'self.view.frame'? Puedes verificar –

+0

@Deepak: Es {ancho: 320, alto: 460}. Agregó el resultado de depuración a la pregunta misma también. –

Respuesta

8

setContentsScale no tiene ningún efecto

[ca setContentsScale:[[UIScreen mainScreen] scale]]; 

Sin embargo, si uso

[ca setFrame:self.view.bounds]; 

funciona.

+0

+1 ¡Bueno! Con 'position' como cero, el resto del contenido se apagó. –

+0

@Deepak: ¡Ya veo! Entonces CALayer se posiciona a sí mismo basándose en el punto de posición/ancla, que está en el punto central de los límites. Muchas gracias por su ayuda. –

+0

Lo has entendido. Acabo de interpretar. :) –

Cuestiones relacionadas