2009-05-15 12 views
9

Tengo una animación agradable y fácil "zoom" para una vista, que comienza como un punto y anima a tamaño de pantalla completa:beginAnimations UIView con subvistas

 
     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationBeginsFromCurrentState:YES]; 
     [UIView setAnimationDuration:1.0]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
     myView.frame = CGRectMake(0,0,320,480); 
     myView.transform = CGAffineTransformIdentity; 
     [UIView commitAnimations]; 

Hasta aquí todo bien :-)

El problema es que cuando agrego subvistas a myView, para mi sorpresa, no siguen el esquema de animación de su supervista.?!?

Btw. las subvistas están actualmente agregadas como de costumbre en el initWithFrame de MyView. Intenté establecer su propiedad de transformación en CGAffineTransformIdentity pero no fue de ayuda.

Entonces, ¿qué hay que hacer para permitir que una subvista de myView también se anime en una linda forma de "zoom" junto con su supervista?

¡Gracias de antemano!
/John

+0

¿Desea agregar a los subvistas después de establecer la transformación en la vista principal? ¿Has intentado ocultar la vista principal en su lugar? – pgb

+0

Sí He intentado establecer la propiedad de transformación de MainView antes de agregar subvistas (en el método initWithFrame) a ninguna ayuda. ¿Qué ocultaría la vista principal para ayudar a resolver este problema? El problema es que las subvistas de MainView se deslizan durante la animación en lugar de acercarse como lo hace MainView. –

Respuesta

15

Me encontré con el mismo problema, y ​​la solución fue sorprendentemente fácil. Mientras que modificar el tamaño del marco solo afecta a la vista actual, no a las subvistas (como notó), la propiedad de transformación también se aplica a las subvistas.

Estoy tratando de hacer lo contrario de lo que está haciendo (tener una subvista que parece 'soltar' en la parte superior de una vista existente cuando se muestra, en lugar de acercarse desde el centro). Este código funciona para mí:

self.transform = CGAffineTransformMakeScale(2,2); 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.25]; 
self.transform = CGAffineTransformMakeScale(1,1); 
self.alpha = 1.0; 
[UIView commitAnimations]; 

intente configurar self.transform a CGAffineTransformMakeScale (0,0) antes de comenzar la animación, y la puso de nuevo a (1,1) antes de comprometerse. No modifique el cuadro en absoluto; déjelo en el tamaño que desee que tenga la vista una vez que finalice la animación.

+0

Puedo confirmar que si modifica explícitamente el marco o los límites dentro de la animación, las subvistas no adoptarán la transformación (lo que da como resultado un zoom de aspecto de mierda) – ohhorob

+0

Sé que esta publicación es antigua, pero acabo de encontrarme con el mismo problema. Para obtener el efecto 'zoom', simplemente haga que el CGAffineTransformMakeScale de inicio (2,2); CGAffineTransformMakeScale (0.1,0.1); CGAffineTransformMakeScale (0,0) no funcionará. – Brett

0

Siempre puede usar el auto-tamaño en el constructor de interfaz. De esta forma, puede especificar el margen izquierdo/que no desea cambiar y el eje a lo largo del cual desea que cambie el tamaño de la subvista en particular.

Autosizing feature

Cuestiones relacionadas