sábado, 28 de agosto de 2010

Animar la interfaz de usuario en iOS

Una de las cosas que tienen mucho las aplicaciones para el iPhone, son animaciones en la interfaz de usuario, por ejemplo en las transiciones entre pantallas.

Esta animación, la que se da al pasar de una pantalla a otra, es bien simple. Lo único que se precisa es pasar un parámetro a la función que muestra la siguiente vista. Algo así:
[navigationController pushViewController:newViewController animated:YES];
Pero además, también es muy sencillo crear animaciones más complejas, de forma totalmente trivial. Alcanza con encerrar el código que modifica la interfaz de usuario en un bloque de animación.
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:duration];

//código del cambio que queremos hacer en la UI

[UIView commitAnimations];
La duración de la animación está expresada en segundos.

Por ejemplo, supongamos que tenemos una toolbar en la parte inferior de la pantalla, y queremos que desaparezca deslizándose hacia abajo cuando presionamos un botón. El código es el siguiente:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3f];

CGRect frame = toolbar.frame;
frame.origin.y += frame.size.height + 1;
toolbar.frame = frame;

[UIView commitAnimations];
Si además quiero que vaya desapareciendo (haciéndose transparente) a medida que se va deslizando hacia abajo, alcanza con agregar:
toolbar.alpha = 0;
antes de hacer el commit de la animación.

Otro ejemplo. Tengo un UIView (clase base para los componentes que tienen interfaz gráfica) que quiero reemplazar por otro girando la interfaz 180º. ¿Qué tan complicado es?

Este es el código:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.7f];
[UIView setAnimationBeginsFromCurrentState:NO];
[UIView
  setAnimationTransition:UIViewAnimationTransitionFlipFromRight
  forView:viewThatRotates
  cache:YES];

[oldView removeFromSuperview];

UIView * newView;
// agregar código para inicializar newView...

[self.view newView];

[UIView commitAnimations];

No hay comentarios.:

Publicar un comentario