Question

J'ai une interface cacao qui utilise l’intrigue principale. Lorsque j'appuie sur un bouton de l'interface, un tracé est tracé. Je souhaitais créer une séquence de graphiques en appelant plusieurs fois la méthode de traçage avec des appels à sleep (). Mais il semble que même si l'appel de recharger des données est effectué, rien ne se passe jusqu'à ce que la fonction se ferme (affichage du dernier graphique également). Maintenant que je sais que CPAnimation existe, mais avant de commencer à l’utiliser, je me demandais ce qui se passe lorsque la fonction se ferme qui actualise le graphique. Devrais-je céder au fil qui s'occupe de rafraîchir au lieu d'utiliser le sommeil?

Était-ce utile?

La solution

Ok, j'ai compris comment. J'ai appelé la méthode reloadData à partir d'une méthode dans un thread séparé (qui retourne toujours). Cela se résumait à appeler reloadData depuis un IBAction et également avec un NSTimer. Enfin, au lieu d’utiliser sleep, j’utiliserai NSConditionLock pour coordonner le traitement et le rafraîchissement

Autres conseils

Probablement, Core Plot (ou votre code) définit l'affichage comme nécessitant un affichage. Cela n'arrive pas immédiatement. cela se produit lorsque vous revenez à la boucle d'événements.

Chaque fois que vous utilisez sleep dans une application Mac OS X, vous tuez un chiot. Utilisez NSTimer à la place. Demandez à votre méthode de rappel du minuteur d'effectuer le travail requis pour un graphique et définissez les variables d'instance nécessaires pour que la méthode sache quel graphe elle doit dessiner, de sorte que la méthode dessine chaque graphe à son tour jusqu'à ce qu'il ne soit plus vide.

Ou, mieux encore, présentez une liste de graphiques parmi lesquels l'utilisateur peut choisir, au lieu de demander à l'utilisateur de regarder tous les graphiques sous forme de diaporama. (À moins que vous ne mettiez en place un diaporama explicitement étiqueté.)

Core Plot, comme la plupart des frameworks de dessin Cocoa, est paresseux: il dessine à la fin de l'itération de la boucle d'exécution. C'est pour s'assurer que les choses ne sont pas dessinées trop souvent.

Plutôt que de dessiner immédiatement, les calques sont marqués comme nécessitant un dessin.

Comme d'autres l'ont déjà souligné, une meilleure approche de la mise en veille consiste à utiliser NSTimer pour éviter de bloquer la boucle d'exécution ou à utiliser des méthodes NSObject telles que performSelector: withObject: afterDelay:

Peter a raison: la méthode de rechargement des données ne dessine rien. Le tracé est marqué comme nécessitant un affichage et est actualisé la prochaine fois que les couches sont dessinées à l'écran. Si vous utilisez sleep , vous n'aurez jamais la possibilité de dessiner.

Notez également que Core Plot est un projet relativement jeune. CPAnimation et les classes associées sont des stubs. Ils ne font encore rien. : -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top