Problème d'actualisation de l'écran
olof
Membre
Salut à tous, c'est encore moi...
Pour me faire la main avec Cocoa, je suis en train de faire un memory (un tableau d'images qu'il faut retourner pour faire des paires).
Ca fonctionne, à un détail près. Je clic sur une premier image, elle s'affiche. Je clic sur une deuxième image, et j'aimerais qu'elle s'affiche et que 2 secondes après le programme test si l'image est identique à la précédente. J'ai donc fait quelque chose du genre :
Je change l'image de ma cellule, je demande une actualisation de ma matrice de cellules et après j'attends 2 secondes.
Pourquoi est-ce que mon image ne s'affiche pas avant la pause de 2 secondes ?
J'espère que je ne dois pas passer par un NSTimer pour ça ?!?!
Merci !
Pour me faire la main avec Cocoa, je suis en train de faire un memory (un tableau d'images qu'il faut retourner pour faire des paires).
Ca fonctionne, à un détail près. Je clic sur une premier image, elle s'affiche. Je clic sur une deuxième image, et j'aimerais qu'elle s'affiche et que 2 secondes après le programme test si l'image est identique à la précédente. J'ai donc fait quelque chose du genre :
<br /> [myCell setImage:[NSImage imageNamed:[myCell nomImage]]];<br /> [matrix setNeedsDisplay:YES];<br /> sleep(2);<br />
Je change l'image de ma cellule, je demande une actualisation de ma matrice de cellules et après j'attends 2 secondes.
Pourquoi est-ce que mon image ne s'affiche pas avant la pause de 2 secondes ?
J'espère que je ne dois pas passer par un NSTimer pour ça ?!?!
Merci !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si.
setNeedsDisplay: est une demande de mise à jour. Donc, cela signifie que la mise à jour effective de l'image interviendra un peu plus tard. Le "un peu plus tard" signifie "à la fin de la boucle d'événement".
Or, le délai que tu provoques par sleep() provoque l'arrêt complet du thread : or ce thread est celui de la boucle d'événement.
Plusieurs solutions :
- utiliser une des méthodes display... de NSView qui affiche immédiatement la mise à jour.
- utiliser un NSTimer calé sur 2 secondes et qui déclenche la méthode de comparaison.
Evidemment, le seconde solution est la meilleure.
.
je m'attendais à quelque chose d'un poil compliqué, mais ça n'était pas le cas. Ca fontionne, merci Bru !