Question

Je commence à développer ma première application Cocoa complet contenant une vue que je voudrais agir (et regarder) semblable à AMWorkflowView de Automator.

Les caractéristiques de base que je voudrais atteindre:

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

Pour se habituer à Cocoa, j'ai commencé avec un NSView personnalisé qui a servi principalement comme un conteneur pour les sous-vues personnalisées et traitées leur positionnement et sélection multiple. Les sous-vues sont également sous-classes de NSView, et contiennent une quantité variable de vues eux-mêmes, comme des boutons, des étiquettes et des menus pop-up, et peuvent donc avoir des hauteurs différentes. Cela a fonctionné assez bien, mais avant de poursuivre, je veux vous assurer d'avoir tout propre et bien rangé selon le modèle MVC.

Je pense qu'il existe déjà une classe à Cocoa qui facilite la mise en œuvre d'un conteneur de vue, comme NSCollectionView peut-être. Il semble qu'il n'y a pas moyen (facile) pour afficher des vues différentes tailles dans une NSCollectionView, cependant. Dois-je continuer à appliquer mon NSView sur mesure (probablement à l'aide d'un NSArrayController pour la sélection et le tri support), ou y at-il de meilleures façons d'aller?

Toute aide est très appréciée

Était-ce utile?

La solution

Malheureusement, la réponse est que vous devrez rouler votre propre. NSCollectionView ne permet pas d'éléments de taille variable (qui exclut également les États déplient / replient).

Pour un nombre limité d'articles, vous pouvez y arriver assez facilement (vous avez juste besoin d'une vue du conteneur qui organise les sous-vues correctement lorsqu'on leur demande de mise en page, vous devez vous assurer que vous re-mise en page quand les choses changent). Pour de nombreux sous-vues, cependant, vous aurez besoin de prendre soin d'être aussi efficace que possible. Cela peut commencer par la pose en aussi peu que possible (seuls les « après » la vue redimensionnée, par exemple) et obtenir aussi complexe que la mise en cache une représentation visuelle d'une vue prototype, le dessin des images mises en cache (rapide!) Pour tous, mais la vue en cours d'édition, et seulement en utilisant / le positionnement d'une vue « réelle » pour la vue en cours d'édition.

Le glisser-déposer fonctionne de la même comme il l'a toujours, mais aucun des comptes ci-dessus pour la NSCollectionView jolie animation vous donne. :-) Il est rapide et magnifiquement animé avec précision parce que tous 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 des vues de taille variable, NSCollectionView ne fonctionnera pas et vous aurez besoin de rouler seul ou trouver quelqu'un d'autre le code est partagé, mais les performances et belle animation ne sera pas facile

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