Animación personalizada para empujar un controlador UIView

Quiero mostrar una animación personalizada al presionar un controlador de vista: me gustaría lograr algo así como una animación “expandir”, lo que significa que la nueva vista se expande desde un rectángulo dado, digamos [100,100 220,380] durante la animación a pantalla completa.

¿Alguna sugerencia de dónde comenzar, respectivamente, cualquier documento, tutorial, enlace? 🙂


Bien. Podría hacer la animación de expansión con el siguiente código:

if ([coming.view superview] == nil) [self.view addSubview:coming.view]; coming.view.frame = CGRectMake(160,160,0,0); [UIView beginAnimations:@"frame" context:nil]; [UIView setAnimationDuration:4]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [coming viewWillAppear:YES]; [going viewWillAppear:YES]; coming.view.frame = CGRectMake(0, 0, 320, 480); [going viewDidDisappear:YES]; [coming viewDidAppear:YES]; [UIView commitAnimations]; 

Mi vista se muestra correctamente, pero desafortunadamente la barra de navegación no se actualiza. ¿Hay alguna manera de hacerlo manualmente?


En el código de muestra, una función se llama todos los 0.03 segundos que actualiza la transformación de la vista. Desafortunadamente, al presionar un UIViewController , no puedo cambiar el tamaño del marco de la vista … ¿o sí?

Lo que podría hacer es presionar el siguiente controlador de vista, pero no animarlo, así:

 [self.navigationController pushViewController:nextController animated:NO]; 

… y luego, en el controlador de vista que está siendo empujado, podría hacer una animación personalizada de su vista usando CoreAnimation. Esto podría hacerse mejor en el método viewDidAppear:(BOOL)animated .

Consulte la Guía de animación básica sobre cómo hacer la animación en realidad. Mire particularmente la animación implícita.

EDITAR: enlace actualizado

Utilizo la siguiente función (agregada a UINavigationController ) para personalizar la animación de inserción:

 - (void) pushController: (UIViewController*) controller withTransition: (UIViewAnimationTransition) transition { [UIView beginAnimations:nil context:NULL]; [self pushViewController:controller animated:NO]; [UIView setAnimationDuration:.5]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationTransition:transition forView:self.view cache:YES]; [UIView commitAnimations]; } 

Supongo que puedes adaptar este código para hacer la animación que quieras.

El código que estás buscando:

  [UIView beginAnimations:@"View Flip" context:nil]; [UIView setAnimationDuration:0.80]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO]; [self.navigationController pushViewController:menu animated:YES]; [UIView commitAnimations]; 

Heinrich,

He hecho un tutorial de youtube que muestra cómo hacer que las vistas se amplíen y disminuyan, como en la aplicación iPhone de Facebook.

Espero que pueda ser de ayuda: cómo hacer que las vistas se expandan / contraigan en el SDK de iPhone

Adán

@zoul: ¡Funcionó muy bien! Cambié “self” a “self.navigationController” y “self.view” a “self.navigationController.view” No sé si eso fue necesario, pero funcionó. Y @crafterm, en cuanto a hacer estallar, simplemente haga su propio LeftBarButtonItem agregando este código en viewDidLoad o ViewWillAppear:

 //add your own left bar button UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonTapped)]; self.navigationItem.leftBarButtonItem = backButton; [backButton release]; 

Luego modifiqué la función push e hice esta función popWithTransition a la que llamé en mi método -backButtonTapped.

 - (void) popWithTransition: (UIViewAnimationTransition) transition { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:.75]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationTransition:transition forView:self.navigationController.view cache:YES]; [UIView commitAnimations]; [self.navigationController popViewControllerAnimated:NO]; } 

Tenga en cuenta que la llamada popViewController se desplazó hacia abajo hasta el final, después de la animación. No sé si eso es kosher, pero de nuevo, funcionó.

Lo que quiere es las descargas para el capítulo 2 del libro de cocina de desarrolladores de iphone . Mire la muestra affineRotate específicamente, aunque cualquiera de las muestras principales de animatin lo ayudará.

Eche un vistazo a ADTransitionController , una sustitución de UINavigationController con animaciones de transición personalizadas (su API coincide con la API de UINavigationController) que creamos en Applidium.

Puede usar diferentes animaciones predefinidas para acciones push y pop como Deslizar , Fundir , Cubo , Carrusel , etc. En su caso, la animación que está solicitando es la llamada Zoom .