animacion con UIImageView

Para dar las gracias debes entrar o registrarte en el foro

iMiembro
iMiembro
Mensajes: 1 Agradecido: 0
24 Ago 2011, 17:16# 1

Hola resulta que estoy tratando de hacer una vista (UIViewController) en la que dispongo de un UIImageView que ocupa toda la pantalla del ipad y otro pequeño UIImageView en una esquina el cual quiero animar para mostrar una cuenta atrás. El UIImageView de fondo está controlado por un UINavigationController, sin embargo el UIImageView de la cuenta atrás al que he llamado "contador" lo controlo desde el método (void)viewDidLoad de la siguiente forma:

Código: Seleccionar todo
- (void)viewDidLoad {
   NSArray *matrizContador;
   matrizContador = [[NSArray alloc] initWithObjects:
                 [UIImage imageNamed:@"contador.png"],
                 [UIImage imageNamed:@"contador2.png"],
                 [UIImage imageNamed:@"contador3.png"],
                 [UIImage imageNamed:@"contador4.png"],
                 nil];
   
   contador.animationImages = matrizContador;
   contador.animationDuration = 4;
   contador.animationRepeatCount = 1;
   [contador startAnimating];
   
   [matrizContador release];
   [super viewDidLoad];
}


Hasta aquí todo bien, sin embargo me gustaría que una vez terminada la cuenta atrás se pudiese ejecutar una acción, ya sea por ejemplo la reproducción de un sonido con un AVAudioPlayer, de esta forma podría tener un método parecido a este:

Código: Seleccionar todo
- (void) comprobarAnimacion {
   while (contador.isAnimating) {
               ...
      //Espera activa
   }
        ...
   //Codigo inicializacion y control de AVAdioPlayer
}


Ahora bien al invocar el método dentro de viewDidLoad no termina de cargar la vista, el código quedaría de la siguiente forma:

Código: Seleccionar todo
- (void)viewDidLoad {
   NSArray *matrizContador;
   matrizContador = [[NSArray alloc] initWithObjects:
                 [UIImage imageNamed:@"contador.png"],
                 [UIImage imageNamed:@"contador2.png"],
                 [UIImage imageNamed:@"contador3.png"],
                 [UIImage imageNamed:@"contador4.png"],
                 nil];
   
   contador.animationImages = matrizContador;
   contador.animationDuration = 4;
   contador.animationRepeatCount = 1;
   [contador startAnimating];
   
   [self comprobarAnimacion];
   
   [matrizContador release];
   [super viewDidLoad];
}


La pregunta es ¿si en viewDidLoad no funciona donde invoco el método comprobarAnimacion de tal forma que se carge la vista? ¿Es posible utilizar un observador al que se notifique que la animación ha terminado, como ocurre por ejemplo con un MPMoviePlayerController? En cuanto a esto último es posible que alguno piense y porque no utilizar un MPMoviePlayerController para la cuenta atrás, sin embargo esta solución no es la adecuada a mis necesidades.

Si alguién puede darme alguna idea o le ha ocurrido algo parecido le agradecería que me echara una mano. Un saludo.
Gracias  
Etiquetado en:
iMiembro
iMiembro
Mensajes: 1 Agradecido: 1
30 Sep 2011, 16:26# 2

Existen muchas formas de solucionarlo, una sencilla y rápida seria usar un NSTimer y un contador, te escribo un ejemplo con una etiqueta:

En la cabecera: declara interface,propiedades del array/temporizador y etiqueta //En tu caso el UIImageView

En implementación sintetiza y:

- (void)viewDidLoad
{
miArray = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",nil]; myTempo = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(cambiar:) userInfo:nil repeats:YES];
[super viewDidLoad];
}

- (void) cambiar: (NSTimer *)temporizador {
if (cuenta <= 4){
etiqueta.text = [miArray objectAtIndex:cuenta];
}
else {
//Reproduce sonido
[myTempo invalidate];
cuenta=0;
}

}

Saludos

Gracias  
1 persona ha dado las gracias: patotemato

Publicidad
Publicidad