NSMatrix et image
mac_manu
Membre
Hello la compagnie,
J'aimerais faire une vue pour afficher des images à la façon de iPhoto. Pour cela, j'utilise une NSMatrix avec des NSCell. Pour afficher une image, pas de problème. Où ça se corse, c'est au redimensionnement de la fenêtre. Si j'ai réussi à faire que les différentes cells varient de taille proportionnellement avec la fenêtre, il n'en va pas de même avec les images contenues; elles restent de même grandeur, alors que j'aimerais qu'elles s'adaptent à la cell correspondante. Quelle fonction ou quelle propriété dois-je utiliser? Merci
J'aimerais faire une vue pour afficher des images à la façon de iPhoto. Pour cela, j'utilise une NSMatrix avec des NSCell. Pour afficher une image, pas de problème. Où ça se corse, c'est au redimensionnement de la fenêtre. Si j'ai réussi à faire que les différentes cells varient de taille proportionnellement avec la fenêtre, il n'en va pas de même avec les images contenues; elles restent de même grandeur, alors que j'aimerais qu'elles s'adaptent à la cell correspondante. Quelle fonction ou quelle propriété dois-je utiliser? Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Mon code:
NSImageCell *imageCell = [matrix* cellAtRow:0 column:0]; *outlet sur une NSMatrix
[imageCell setImage:monImage];
[imageCell setImageScaling:NSScaleTofit];
Message d'erreur: NSActionCellsetImageScaling: selector not recognized.
Petite question bête, faut-il que je sous-classe NSMatrix?
[tt]
-(id)initWithFrame:(NSRect)frameRect
{
  [super initWithFrame:frameRect mode:NSRadioModeMatrix cellClass:[NSImageCell class] numberOfRows:5 numberOfColumns:5];
  return self;
}
[/tt]
Pourquoi sous-classer NSMatrix, alors que la solution donnée par Aligator est justement faite pour éviter ça ?
.
[matrix setScrollable:YES]; ?
Encore merci pour votre précieuse aide!
PS: Je viens de lire le dernier message. Je vais essayer d'utiliser la solution d'Aligator, en faisant:
[matrix setCellClass:NSImageCell];
Ces méthodes ne sont valables que pour la création de nouvelles cell, pas pour changer dynamiquement la classe des cells existantes. Donc tout se joue lors de l'initialisation de la matrice.
Cette méthode autorise ou non le scrolling à l'intérieur de tes cells, par exemple si tes cells sont des texfields. Si c'est au niveau de la view de la matrice, il faut mettre ta matrice dans une NSScrollView.
Ce qui est son cas (et sans doute toujours le cas), non ?
Dans IB, la création de la NSMatrix initiale est simple : déposer une NSImageView, et l'agrandir en appuyant la touche OPTION.
On peut aussi utiliser l'inspecteur, définir la cellule prototype, et réappliquer ce prototype à toutes les cellules existantes.
Sinon, par programmation, il suffit simplement de réutiliser le code que tu sous-classes ([tt]initWithFrame:mode:cellClass:numberOfRows:numberOfColumns:[/tt]) pour créer la matrice initiale.
De fait, tu me "choques" un peu en créant une sous-classe pour modifier un comportement qui a été prévu d'être modifiable dans la classe en question.
.
Bien sûr, mais les méthodes setPrototype et setCellClass ne sont pas adaptées dans un tel cas contrairement à ce que pourraient le laisser entendre les réactions plus haut.
Tout à fait...j'ai eu l'habitude jusqu'à maintenant de n'utiliser que des matrices plutôt customisées, je me suis contenté de faire un copier/coller de mon code et de le modifier, de plus partant du principe que mac_manu crée sa matrice par code, je pensais qu'elle contenait des spécificitées, sinon pourquoi ne pas la faire simplement dans IB ?