2009-08-04 5 views
0

J'ai une interface cacao qui utilise le tracé de base. Lorsque j'appuie sur un bouton de l'interface, un tracé est tracé. Je voulais créer une séquence de graphiques en appelant la méthode de tracé plusieurs fois avec des appels à sleep() entre les deux. Mais il semble que même si l'appel à recharger des données est fait que rien ne se passe jusqu'à ce que la fonction se termine (ne montrant que le dernier graphique). Maintenant, je sais que CPAnimation existe, mais avant de commencer à l'utiliser, je me demandais ce qui se passe quand la fonction se termine, ce qui fait rafraîchir le graphique. Devrais-je céder au fil qui s'occupe du rafraîchissement au lieu d'utiliser le sommeil?Comment est-ce que je peux rafraîchir l'intrigue centrale sans retourner d'une méthode?

+0

Ajouté le tag-terrain de base (comme vous avez demandé dans une autre question). – M4N

+0

merci thx mate! –

+0

Encore une fois, peu de contributeurs au framework Core Plot sont actifs sur Stack Overflow. Vous pouvez obtenir de meilleures réponses à vos questions sur la liste de diffusion du projet: http://groups.google.com/group/coreplot-discuss?hl=fr –

Répondre

3

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

2

Probablement, Core Plot (ou votre code) définit la vue comme ayant besoin d'être affichée. Cela ne se produit pas immédiatement. Cela arrive quand vous revenez à la boucle d'événement.

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 de faire le travail nécessaire pour un graphique, et définissez les variables d'instance nécessaires pour que la méthode sache quel graphique elle doit dessiner, de sorte que la méthode dessine chaque graphique à tour de rôle jusqu'à ce qu'il soit épuisé.

Ou, mieux encore, de présenter une liste de graphiques que l'utilisateur peut choisir, au lieu de faire l'utilisateur de regarder tous les graphiques sous forme de diaporama. (À moins qu'un diaporama explicitement étiqueté soit ce que vous implémentez.)

0

Peter a raison: la méthode de rechargement de données ne dessine rien. L'intrigue est marquée comme ayant besoin d'être affichée et actualisée la prochaine fois que les couches sont dessinées à l'écran. Si vous utilisez sleep, il n'a jamais la chance de dessiner.

Notez également que Core Plot est un projet assez jeune; CPAnimation et les classes associées sont des stubs. Ils ne font vraiment rien pour l'instant. :-)

+0

Voulez-vous dire que cpanimation ne fonctionne pas encore? –

+0

Oui, c'est correct. –

+0

oh, merci pour la réponse, en attendant j'ai de l'animation avec un peu de code personnalisé et c'est assez rapide pour ce dont j'ai besoin en ce moment. –

2

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 couches sont marquées comme nécessitant un dessin.

Comme il a été souligné par d'autres, une meilleure approche pour dormir est d'utiliser NSTimer pour éviter de bloquer la boucle d'exécution ou d'utiliser des méthodes NSObject comme performSelector withObject: afterDelay:

Questions connexes