Question

J'ai une question plutôt fondamentale. J'ai plusieurs (5) images UIImageView sur mon écran. Quand je clique sur un bouton, je veux changer chaque image à quelque chose d'autre. Je veux aussi jouer un son à chaque changement d’image.

Je souhaite donc en principe un clic lorsque chaque image change.

Le problème est que, pour une raison quelconque, si j’ai dis 5 images,
le son est joué 5 fois d’abord puis les images changent.

C’est comme si les images ne s’actualisaient que lorsque le contrôle revenait à la utilisateur pour la saisie.

Comment puis-je "forcer" pour rafraîchir les images dès que je lui dirai quelle image afficher?

Je suis nouveau sur l'iPhone / macworld, alors allez-y doucement sur moi: -)

Rick

Était-ce utile?

La solution

  

C'est comme si les images ne s'actualisaient que lorsque le contrôle revenait à l'utilisateur pour qu'il les saisisse.

C'est exactement ce qui se passe. L'interface utilisateur est mise à jour sur le thread principal. Aucune mise à jour n'est donc nécessaire pendant l'exécution de votre code.

Pour obtenir ce que vous voulez, vous aurez besoin de minuteries. Consultez la documentation NSTimer. Vous devez créer un minuteur qui déclenche une méthode pour changer votre deuxième image, puis remettre en attente un minuteur pour changer votre troisième image. Il existe une méthode pratique pour créer une minuterie dont vous avez besoin: + (NSTimer *) timerWithTimeInterval: (NSTimeInterval) secondes cible: (id) sélecteur de cible: (SEL) aSelector userInfo: (id) userInfo répète: (BOOL) répète

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

alors, vous avez une méthode:

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

Je vous laisse le soin d'implémenter la méthode updateImage3:; -)

L'exécution des mises à jour de cette manière donne au thread principal une occasion de mettre à jour l'interface utilisateur.

Autres conseils

Si vous recherchez un moyen d'actualiser régulièrement UIImageView, vous pouvez faire référence aux éléments suivants: http://www.shanison.com/2010/12/ 25 / uiimageview-load-remote-image /

On dirait que vous chargez probablement les images hors du disque ou du réseau tout en reproduisant un son de manière asynchrone. Vous utilisez peut-être AudioServicesPlaySystemSound avec UIImage + imageWithContentsOfURL: ? Le chargement actuel de l'image et le code de lecture du son seraient des plus utiles ici.

Cela a fonctionné pour moi lorsque je voulais changer l'arrière-plan d'uiimageview et l'actualiser, puis continuer à exécuter le code:

-(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]; 
 }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top