Pregunta

Tengo una pregunta bastante básica. Tengo varias (5) imágenes UIImageView en mi pantalla Cuando hago clic en un botón, quiero cambiar cada imagen a otra cosa También quiero reproducir un sonido a medida que cambia cada imagen.

Así que básicamente quiero un sonido de clic a medida que cambia cada imagen.

El problema es, por alguna razón, si tengo 5 imágenes,
el sonido se reproduce 5 veces primero y luego las imágenes cambian.

Es como si las imágenes solo se actualizaran cuando el control vuelve a usuario para entrada.

¿Cómo puedo " forzar " para actualizar las imágenes tan pronto como le diga qué imagen mostrar?

Soy nuevo en iphone / macworld, así que no te preocupes por mí :-)

Rick

¿Fue útil?

Solución

  

Es como si las imágenes solo se actualizaran cuando el control regresa al usuario para su entrada.

Eso es exactamente lo que sucede. La interfaz de usuario se actualiza en el hilo principal, por lo que no se producen actualizaciones mientras se ejecuta el código.

Para lograr lo que desea, necesitará temporizadores. Echa un vistazo a la documentación de NSTimer. Debe crear un temporizador que active un método para cambiar su segunda imagen y luego solicitar un temporizador para cambiar su tercera imagen. Hay un método conveniente para crear un temporizador como el que necesita: + (NSTimer *) timerWithTimeInterval: (NSTimeInterval) segundos objetivo: (id) selector de objetivo: (SEL) aSelector userInfo: (id) userInfo se repite: (BOOL) se repite

[NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateImage2:) userInfo:nil repeats:NO];

entonces, tienes un método:

- (void) updateImage2(NSTimer*)theTimer
{

     //Update image 2 here
     // play sound 2 here

    [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateImage3:) userInfo:nil repeats:NO];
}

Dejaré que implemente el método updateImage3: ;-)

Ejecutar las actualizaciones de esta manera le da al hilo principal la oportunidad de actualizar la interfaz de usuario.

Otros consejos

Si está buscando una manera de actualizar el UIImageView periódicamente, puede hacer referencia a lo siguiente: http://www.shanison.com/2010/12/ 25 / uiimageview-load-remote-image /

Parece que probablemente esté cargando las imágenes del disco o la red mientras reproduce un sonido de forma asincrónica. ¿Quizás esté usando AudioServicesPlaySystemSound junto con UIImage + imageWithContentsOfURL: ? La carga real de la imagen y el código de reproducción de sonido serían más útiles aquí.

Esto funcionó para mí, cuando quería cambiar el fondo de uiimageview y actualizarlo, y continuar ejecutando código después de eso:

-(void)imgTapped_event:(UIImageView*)imgViewTapped
{
     imgViewTapped.backgroundColor=[UIColor whiteColor];

     //let the system update ui changes
     [NSRunLoop currentRunLoop]runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.0f]];

     //continue your code execution, play sounds etc...

     //my helper method to play sound
     [self playSound:@"goodAnswer" sync:YES loops:0]; 
 }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top