7
votes

Utilisation de NSPROGRESSIndicator à l'intérieur d'un Nsmenuitem

J'essaie d'utiliser un NSPROGRESSIndicator (indéterminé) à l'intérieur d'un menu de barre d'état. J'utilise un objet Nsview en tant que vue pour la menuem, puis Sous-Sousvishs l'indicateur de progression pour l'afficher. Mais chaque fois que j'essaie d'appeler la staranimation: Pour les progrès, rien ne se passe. Quand j'essaie de faire la même chose sur une nswindow normale, cela fonctionne parfaitement, tout à l'intérieur d'un menuem.

Je suis nouveau à la fois au cacao et à l'objectif-c afin que j'ai donc suscité quelque chose "évident" mais je " J'ai cherché un peu pour une solution de contournement mais sans succès. J'ai trouvé quelque chose à propos de Menuitems ne peut pas être mis à jour alors que vous devez utiliser une fenêtre sans bordure. Mais je n'ai pas pu confirmer cela dans une documentation.

Edit:

OK, fonctionne presque maintenant. Lorsque vous utilisez la SETUSTESTHREADEDANIMATION: et à partir d'une menuGelegate's Menuwillopen et crée un nouveau fil. Ce fil est exécuté une méthode locale: xxx

Ceci démarrera progresssioricator sur une base aléatoire (?) Lors de l'ouverture du menu. Si j'appelle startanimation: directement sans passer par dowork: (toujours en utilisant un nouveau fil), il ne fonctionne jamais. Ne settusesthreadédanimation: faire la progression-barrette crée son propre thread pour l'animation?


0 commentaires

3 Réponses :


0
votes

Avez-vous dit d'utiliser une animation filetée via -Setusesthreadédanimation:?


0 commentaires

1
votes

Comment référencez-vous le NSProgressIndicator qui est dans la vue (et celui de la fenêtre, à cette affaire)? Par exemple, avez-vous une classe de contrôleur qui a iboutlet connecté aux indicateurs de progrès? Si vous utilisez un iboutlet , êtes-vous sûr qu'il est connecté correctement dans le fichier NIB?

Aussi, où et quand appelez-vous startanimation: ? (Nous devons voir du code).

Une chose qui peut parfois se produire est que vous oubliez de connecter un iboutlet dans la nib. Ensuite, lorsque vous essayez de dire à l'objet de faire quelque chose dans le code au moment de l'exécution, le iboutlet est nil , et donc ce que vous pensez est un message envoyé à votre objet est En fait, un message envoyé à nil . En d'autres termes, il est juste d'ignorer et on dirait effectivement que cela ne fonctionne pas.

à condition que vous ayez une référence (potentiellement) valide à l'objet UI, l'autre problème courant que vous verrez est lorsqu'un développeur tente d'envoyer un message à l'objet à «trop tôt» de la fois. En général, les méthodes init sont trop tôt dans la durée de vie de l'objet du contrôleur pour pouvoir envoyer des messages aux objets d'interface utilisateur-Ceux iboutlet S sont toujours nil . Au moment où -awakefromnib est appelé, iboutlet S doit être valide (à condition que vous les ai accrochés dans IB) et vous pouvez ensuite envoyer le message à l'objet UI. < / p>


3 commentaires

Bons points, cela explique pourquoi j'ai parfois eu des valeurs nulles lorsque vous essayez d'atteindre les composants de sortie (les appelez trop tôt). Maintenant, j'ai semblé réduire à un problème de dessin. Je l'ai fait animé lorsque la menuem contenant la vue est mise en surbrillance (dans le drawrect de mon vue :), puis faites-la arrêter quand elle n'est plus mise en évidence. Mais si j'essaie de le faire animer en dehors de la clause IF-Clause qui vérifie si l'article est mis en surbrillance, rien ne se passe (toujours à l'intérieur du drawrect :).


J'ai réussi à le faire fonctionner un peu plus, il semble que je devais envoyer à Stopanimation: un jour avant de faire de la starganimation: travail. Mais je veux qu'il anime (ou non) quand ils sont affichés. Actuellement, je dois mettre la souris sur la vue pour qu'il commence, lorsqu'il est affiché, il est affiché que la barre de progression ne s'anime pas même si elle devrait être cachée lorsqu'il ne devrait pas être masqué lorsqu'il n'est pas (SetDisPlaywhenspla -stopped: Non). Être poursuivi dans le prochain commentaire ...


Et je ne peux toujours pas le faire fonctionner lorsque vous l'appelez à l'extérieur de mon objet de visualisation, par exemple. Naviguer dans les sous-espions de la Nsmenu dans sa classe de contrôleur. Il semble que le menu soit affiché pour que l'animation fonctionne.



16
votes

résolu en utilisant: xxx

à l'intérieur du menuWillopen :, le problème semble avoir appelé stagnation: avant que la barre de progression ait fini de se dessiner.


4 commentaires

Merci beaucoup pour ce conseil, cela aide vraiment!


Fou, combien de temps je cherche à faire ce travail, merci beaucoup!


Merci Buddy! Merci Buddy! Merci Buddy!


Il semble que cela ne vous aide pas à haute sierra, bien que cela fonctionne bien sur la SIERRA et SIXE (peut être lié à ce forums.ayveloper.apple.com/thread/83186 )