NSMatrix + NSCell ou bien NSView pour dessiner plein de données dans une vue ?
muqaddar
Administrateur
Bonjour,
Je viens de lire pas mal de discussion sur les matrices sur ce même site.
Je vous expose mon problème. En fait, ce n'est pas vraiment un problème, je veux juste avoir votre avis pour un prochain dév.
Je souhaite afficher une matrice de vues avec scrolling et mise à l'échelle comme iPhoto. Or chaque NSCell doit afficher tout un tas d'informations.
A savoir une vue contenant :
- une image centrale
- des chiffres aux 4 coins de la cellule (voir d'autres imagettes dans les coins ou bien des drawings)
J'ai lu que Bru par exemple ne conseillait pas de faire une NSMatrix dans ce cas là . Mais une vue qui englobe les vues.
Est-ce la meilleure façon de procéder ?
Côté performances, je précise que :
- il pourrait y avoir jusqu'à 1000 vues (ou 1000 NSCell) dans la matrice
- chaque image centrale est la même (donc moins de ressources !!!) ou au pire il y aurait 4 ou 5 images différentes.
- lors du resizing, tout doit diminuer proportionnellement à l'intérieur d'une même cellule.
Qu'en pensez-vous ? Quelle est la meilleure façon de procéder ?
Je viens de lire pas mal de discussion sur les matrices sur ce même site.
Je vous expose mon problème. En fait, ce n'est pas vraiment un problème, je veux juste avoir votre avis pour un prochain dév.
Je souhaite afficher une matrice de vues avec scrolling et mise à l'échelle comme iPhoto. Or chaque NSCell doit afficher tout un tas d'informations.
A savoir une vue contenant :
- une image centrale
- des chiffres aux 4 coins de la cellule (voir d'autres imagettes dans les coins ou bien des drawings)
J'ai lu que Bru par exemple ne conseillait pas de faire une NSMatrix dans ce cas là . Mais une vue qui englobe les vues.
Est-ce la meilleure façon de procéder ?
Côté performances, je précise que :
- il pourrait y avoir jusqu'à 1000 vues (ou 1000 NSCell) dans la matrice
- chaque image centrale est la même (donc moins de ressources !!!) ou au pire il y aurait 4 ou 5 images différentes.
- lors du resizing, tout doit diminuer proportionnellement à l'intérieur d'une même cellule.
Qu'en pensez-vous ? Quelle est la meilleure façon de procéder ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si tu fais référence à ce post, ce n'est pas ça.
Dans le cas de Olivier555, il y a dans sa "matrice" des contrôles (boutons et slider de mémoire), donc on sort du cadre de NSCell.
Dans ton cas, NSCell est une bonne solution, et moins gourmande en ressource que NSView.
.
Exactement, je faisais référence à ce post. :-) (pardon de ne pas avoir mis le lien)
Ok, je vais donc partir sur une NSMatrix.
Dans mon cas, il me faut donc :
- une classe MatrixController (NSObject) qui gère le fonctionnement de la matrice, les données des cellules et les redimensionnements
- une classe CellView (NSView) qui dessine tout ce qu'il y a à afficher dans chaque cellule (NSCell)
Ai-je besoin d'autre chose ? A priori, je n'ai pas besoin de sous-classer NSCell, ni NSMatrix.
Tu t'égares...
NSMatrix est un NSView (en fait un NSControl) qui affiche une série de NSCell en ligne et en colonne.
C'est donc NSCell que tu dois sous-classer afin de personnaliser la fonction de dessin de son contenu.
.
Je dirais 1000 vues, ou ... une seule NSCell. Si tu te bases sur le fonctionnement des tables, ça doit se passer comme ça: 1. 'remplir' la cell (=donner les bonnes variables), 2. dessiner la cell là où il faut, 3. la "remplir" à nouveau avec les données de l'élément suivant,.... Une fois que ce qui doit être dessiné est dessiné, tu fais ce que tu veux de ta cell 'prototype', ce qui a été dessiné restera.
Les matrix ne fonctionnent pas comme ça (elles créent une instance par cellule) donc je suis pas sur que ce soit le plus adéquat pour ça.
Donc si j'ai 1000 cellules, je vais instancier 1000 NSCell "customizées" avec des contenus différents. C'est ça ?
Donc, tu ne privilégies pas la piste de Bru où j'ai rien compris ?
À toi de voir suivant ce que tu dois faire, peser le pour et le contre de chaque piste, je n'ai pas assez d'info pour préconiser une solution ou une autre.
Ce ne sera que de l'affichage d'infos (et du drawing)... et à priori juste faire du simple clic ou double clic sur chaque NSCell... ;-)