2011-12-21 12 views
7

Tengo una UIView que contiene dos subvistas. Me gustaría cambiar el tamaño del fotograma de la supervista con una animación y hacer que los tamaños de las subvistas cambien de acuerdo con sus máscaras de autoresize.Animación del cambio de tamaño de fotograma de UIView con aumentos de las subvistas

[UIView beginAnimations:@"Resize" context:nil]; 
[UIView setAnimationDuration:1.0]; 
CGRect frame = self.myView.frame; 
frame.size.height += 30.0; 
self.myView.frame = frame; 
[UIView commitAnimations]; 

La vista self.myView se cambia el tamaño más de 1 segundo como se esperaba, pero los subvistas cambie el tamaño inmediatamente. ¿Alguien sabe por qué está sucediendo esto y cómo podría hacer que las subvistas animaran su redimensionamiento también?

De mi google, creo que podría tener algo que ver con la propiedad contentMode. Lamentablemente, no tengo muy claro qué hace esa propiedad. Cualquier ayuda sería muy apreciada.

Respuesta

1

OK, así que me di cuenta el tema después de leer la respuesta a la siguiente pregunta: Animating a UIView frame, subview UIScrollView doesn't always animate

que básicamente estaba realizando un trabajo después de que programé la animación que estaba causando - layoutSubviews a llamarse en cada una de mis subvistas que automáticamente hizo que esas vistas se organizaran en el punto final de la animación. Al programar mi animación después de terminar este trabajo, pude resolver mi problema.

14

Habría sido difícil para otra persona darte la respuesta correcta sin ver tu código aunque te hubiera preguntado qué estás haciendo después de [UIView commitAnimations]. Sin embargo, me alegro de que lo hayas descifrado. Te sugiero que uses las animaciones en bloque. Hacen que este tipo de error sea mucho más fácil de evitar al usar un bloque de finalización. Ejemplo:

[UIView animateWithDuration:1.0 
       animations:^{ 
        CGRect frame = self.myView.frame; 
        frame.size.height += 30.0; 
        self.myView.frame = frame; 
       } 
       completion:^(BOOL finished){ 
        // whatever you need to do when animations are complete 
       }]; 
+0

Desafortunadamente, la necesidad de ser compatible con versiones anteriores de iOS descarta las animaciones de bloques. Gracias por el consejo. – jjoelson

+1

tiene sentido. aunque la base instalada de <4.x es bastante pequeña en estos días. – XJones

Cuestiones relacionadas