2010-04-05 26 views
1

Je commence à développer ma première application Cocoa complète contenant une vue que je voudrais me comporter (et regarder) similaire à AMWorkflowView d'Automator.Comment imiter la vue de flux de travail d'Automator?

Les caractéristiques de base que je voudrais obtenir:

  • Positionnement des sous-vues
  • Affichage des sous-vues dans les états déplient/replient
  • Sélection multiple
  • glisser-déposer

Afin de m'habituer à Cocoa, j'ai commencé avec un custom NSView qui servait principalement comme ca ontainer pour les sous-vues personnalisées et géré leur positionnement et leur sélection multiple. Les sous-vues sont également des sous-classes de NSView et contiennent une quantité variable de vues elles-mêmes, comme des boutons, des étiquettes et des menus contextuels, et peuvent donc avoir des hauteurs différentes. Cela a fonctionné assez bien, mais avant de continuer, je veux m'assurer d'avoir tout propre et bien rangé selon le modèle MVC.

Je soupçonne qu'il existe déjà une classe dans Cocoa qui facilite la mise en œuvre d'un conteneur de vue, comme peut-être NSCollectionView. It seems that there is no (easy) way pour afficher des vues de tailles différentes dans un NSCollectionView, cependant. Dois-je continuer à implémenter mon NSView personnalisé (probablement en utilisant un NSArrayController pour le support de sélection et de tri), ou y a-t-il de meilleures façons d'y aller?

Toute aide est très appréciée

Répondre

0

Malheureusement, la réponse est que vous devrez rouler votre propre. NSCollectionView n'autorise pas les éléments de taille variable (qui exclut également les états étendus/réduits).

Pour un nombre limité d'éléments, vous pouvez le faire assez facilement (vous avez juste besoin d'une vue de conteneur qui arrange correctement les sous-vues lorsqu'on vous demande de les mettre en page, alors vous devez vous ré-agencer quand les choses changent). Cependant, pour de nombreuses sous-vues, vous devrez faire attention à être aussi efficace que possible. Cela peut commencer avec la mise en page aussi peu que possible (seulement par "après" la vue redimensionnée, par exemple) et aussi complexe que la mise en cache d'une représentation visuelle d'un prototype, dessinant les images mises en cache (fast!) en cours d'édition, et en utilisant/positionnant uniquement une vue "réelle" pour la vue en cours d'édition. Glisser-déposer fonctionne comme toujours, mais aucun des comptes ci-dessus pour la jolie animation NSCollectionView vous donne. :-) C'est rapide et magnifiquement animé précisément car toutes les sous-vues sont uniformes (donc les calculs de mise en page sont rapides et simples). Une fois que vous ajoutez des tailles irrégulières, le problème devient beaucoup plus compliqué. La ligne du bas: Si vous avez besoin de vues de taille variable, NSCollectionView ne fonctionnera pas et vous devrez rouler le vôtre ou trouver le code partagé de quelqu'un d'autre, mais les performances et la belle animation ne seront pas faciles.

+0

Merci pour la réponse. Je le soupçonnais déjà. Je vais essayer de reproduire l'architecture de 'NSCollectionView' et de' NSCollectionViewItems'. – andyfeind