iphone aggiorna le immagini UIImageView
-
06-07-2019 - |
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
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];
}