2011-10-27 9 views
13

Tengo un UIView padre que tiene el UIView secundario (UILabel utilizado en el código siguiente) cuyo marco está establecido en los límites del padre y cuyo autoresizingMask se establece en ancho flexible y altura:Marco de Autoreizing de UILabel al animar el marco (tamaño) del UIView padre

UIView* parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
UILabel* childLabel = [[UILabel alloc] initWithFrame:parentView.bounds]; 
childLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
childLabel.textAlignment = UITextAlignmentCenter; 
childLabel.text = @"Hello"; 

Quiero ser capaz de animar el marco de la vista padre, específicamente su tamaño, y tienen la subvista cambiar el tamaño como parte de la animación:

[UIView animateWithDuration:1.0 animations:^{ parentView.frame = CGRectMake(0, 0, 160, 240); }]; 

como resultado de esta animación I querría que el texto de UILabel se animara junto con la vista principal a nimación, de forma visual vería que el texto pasa de estar centrado en (160, 240) a (80, 120). Sin embargo, en lugar de animar, parece que el fotograma de la subvista se establece inmediatamente en el valor que debería tener al final de la animación, por lo que verá que la posición del texto se dispara inmediatamente cuando comienza la animación.

¿Hay alguna manera de hacer que las subvistas se personalicen como parte de una animación?

Respuesta

20

No entiendo por completo lo que está pasando, pero creo que el problema principal es que UIKit no quiere tener que volver a procesar el texto en cada cuadro de la animación, por lo que el contenido de un UILabel no son animables De forma predeterminada, la propiedad contentMode de UILabel es UIViewContentModeRedraw, lo que significa que volverá a dibujar el UILabel en el tamaño de destino tan pronto como se establezca la propiedad.

Si cambia el contentMode a UIViewContentModeCenter, el contenido no se volverá a dibujar y permanecerá centrado en el UILabel.

childLabel.contentMode = UIViewContentModeCenter; 
+1

Esa es una gran información. UIViewContentModeCenter funciona para lo que realmente necesito, para que el texto permanezca centrado mientras que el marco de la vista principal se reduce o crece. Gracias. –

+0

¡Lo suficientemente genial! ¡Gracias! – Kjuly

Cuestiones relacionadas