bar iphone animation uikit uiviewcontroller uinavigationcontroller

iphone - bar - Animación personalizada para empujar un controlador UIView



uinavigationbar ios (7)

Quiero mostrar una animación personalizada al presionar un controlador de vista: me gustaría lograr algo así como una animación de "expansión", es decir, 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 empezar, respectivamente, documentos, tutoriales, enlaces? :)

Bien. Podría hacer la animación expandida 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 una manera de hacerlo manualmente?

En el código de ejemplo, 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 ... ¿verdad?


@zoul: ¡Eso funcionó muy bien! Acabo de cambiar "self" a "self.navigationController" y "self.view" a "self.navigationController.view" No sé si eso era necesario, pero funcionó. Y @crafterm, en cuanto a regresar, solo crea tu propio elementoBarButton izquierdo 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 simplemente ajusté la función de inserción 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ó hasta el final, después de la animación. No sé si eso es kosher, pero una vez más, funcionó.


Eche un vistazo a ADTransitionController , un reemplazo en lugar 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 de inserción y pop como Swipe , Fade , Cube , Carrousel , etc. En su caso, la animación que está solicitando es la que se llama Zoom .


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];



Lo que podrías 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 se está insertando, podría hacer una animación personalizada de su vista utilizando CoreAnimation. Esto podría hacerse mejor en el método viewDidAppear:(BOOL)animated .

Echa un vistazo a la Guía de animación básica sobre cómo hacer la animación. Mira particularmente la animación implícita.

EDITAR: enlace actualizado


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


Uso 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 podrías adaptar este código para hacer cualquier animación que quieras.