2012-05-15 17 views
5

Estoy tratando de hacer una animación para contraer una vista que incluye algunas subvistas.iOS animando una vista que incluye subvistas

[UIView beginAnimations:@"advancedAnimations" context:nil]; 
[UIView setAnimationDuration:3.0]; 

CGRect aFrame = aView.frame; 
aView.size.height = 0; 
aView.frame = aFrame; 

[UIView commitAnimations]; 

Esta animación está muy bien, pero solo para aView. Las subvistas no colapsan como se esperaba. ¿Cómo puedo hacer que las subvistas se colapsen también? Además, ¿hay alguna manera de volver a calcular el tamaño del original después del colapso?

THX

Respuesta

5

Probablemente haya olvidado aplicar alguna máscara de aumento automático a sus subvistas. Si lo hace

for (UIView *subview in aView.subviews) { 
    subview.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin); 
} 

debería funcionar.

PERO, personalmente me gustaría utilizar, como se dijo Lamelas

aView.transform = CGAffineTransformMakeScale(1.0,0.0); 
+0

Todavía es bueno, pero lo que quiero hacer es colapsar la vista, ocultando su contenido a medida que se hace más pequeño. CGAffineTransformMakeScale escala todo el contenido. Por cierto, no puedes usar 0.0 en transformaciones. – toppless

+0

¿Dónde viste que no podemos usar 0.0 en transformadas? De todos modos, no estoy seguro de cuál es tu pregunta ... ¿Quieres que se escala tu subvistas, o quieres que se recorten a medida que se produce la animación? – Zoleas

+0

Intente configurarlo en 0.0 y observe cómo se verá la animación y compárela con la configuración en 0.001. Estoy tratando de no cambiar el tamaño de las subvistas, sino de tener un efecto de "puerta corredera", ya que la vista principal se hace más pequeña. – toppless

4

Intente utilizar esto para animar:

aView.transform = CGAffineTransformMakeScale(1.0,0.0); 
+0

+1 Eso es oh tanto más agradables. – Caleb

+0

Funciona mejor, pero la animación es un poco extraña: trata de "apretar" la vista en el punto medio. – toppless

0

una conjetura:

[UIView beginAnimations:@"advancedAnimations" context:nil]; 
[UIView setAnimationDuration:3.0]; 

CGRect aFrame = aView.frame; 
aView.size.height = 0; 
aView.frame = aFrame; 

for (UIView *subview in aView.subviews) { 
    CGRect frame = subview.frame; 
    frame.size.height = 0; 
    subview.frame = frame; 
} 

[UIView commitAnimations]; 

Por otra parte, hay una manera de volver a calcular tamaño original tras sufrir un colapso?

es probable que desee guardar sólo la altura antes de caer.

Cuestiones relacionadas