Domanda

Ho una domanda piuttosto elementare. Ho diverse (5) immagini UIImageView il mio schermo. Quando faccio clic su un pulsante, voglio cambiare ogni immagine a qualcos'altro. Voglio anche riprodurre un suono quando ogni immagine viene modificata.

Quindi, in pratica, desidero un suono di clic quando ogni immagine cambia.

Il problema è, per qualche motivo, se dico 5 immagini,
il suono viene riprodotto 5 volte prima e poi le immagini cambiano.

È come se le immagini si aggiornassero solo quando il controllo torna a utente per input.

Come posso "forzare" per aggiornare le immagini non appena gli dico quale immagine visualizzare?

Sono nuovo di iPhone / Macworld, quindi andate piano con me :-)

Rick

È stato utile?

Soluzione

  

È come se le immagini si aggiornassero solo quando il controllo torna all'utente per l'input.

È esattamente quello che succede. L'interfaccia utente viene aggiornata sul thread principale, quindi non si verificano aggiornamenti mentre il codice è in esecuzione.

Per ottenere ciò che desideri, avrai bisogno di timer. Dai un'occhiata alla documentazione di NSTimer. Devi creare un timer che attiva un metodo per cambiare la tua seconda immagine e quindi rielaborare un timer per cambiare la tua terza immagine. Esiste un metodo conveniente per creare un timer di cui hai bisogno: + (NSTimer *) timerWithTimeInterval: (NSTimeInterval) secondi target: (id) selettore target: (SEL) aSelector userInfo: (id) userInfo ripete: (BOOL) ripete

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

allora hai un metodo:

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

Lascio a te l'implementazione del metodo updateImage3: ;-)

L'esecuzione degli aggiornamenti in questo modo offre al thread principale la possibilità di aggiornare l'interfaccia utente.

Altri suggerimenti

Se stai cercando un modo per aggiornare periodicamente UIImageView, puoi fare riferimento a quanto segue: http://www.shanison.com/2010/12/ 25 / UIImageView-load-remote-immagine /

Sembra che probabilmente stai caricando le immagini dal disco o dalla rete durante la riproduzione di un suono in modo asincrono. Forse stai usando AudioServicesPlaySystemSound insieme a UIImage + imageWithContentsOfURL: ? Il caricamento effettivo dell'immagine e il codice di riproduzione del suono sarebbero molto utili qui.

Questo ha funzionato per me, quando volevo cambiare lo sfondo di uiimageview e aggiornarlo e continuare a eseguire il codice successivamente:

-(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]; 
 }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top