petite appli cocoa our afficher des images

A

Anonyme

Invité
Salut,

Je débute juste mais je suis déjà impatient... j'ai fait les 2 premiers tutorials de ProjectOmega.
Voilà, je voudrais faire un petite appli pour afficher des images (déjà importées dans l'appli pendant sa construction). Je m'explique. On lance l'appli avec un beau cadre gris metalisé
smile.gif
Il y a une image affichée par défaut (ça je sais faire). Dessous cette image on trouve 3 bouttons : précédente, suivante et aléatoire qui permettront d'afficher les images. Et dessous, on trouve les vignettes de toutes les images qui servent de boutton également pour afficher l'image en grand. Et ce, toujours dans le même cadre, à la place de l'image d'accueil.

Voilà, je suis impatient... j'ai commandé "cocoa par la pratique"... mais si quelqu'un peut m'expliquer vite fait comment je dis à mon boutton d'aller chercher une image et de la mettre à la place de l'autre... merci ! Je pense qu'il faut déjà cliquer-glisser le boutton vers l'image par défaut en maintenant contrôle enfoncé... mais après...

merci !

 
Saches tout d'abord que pour bien programmer en Cocoa et facilement, il faut bien intégrer la notion MVC pour Model Vue Controlleur. Ensuite bien connaitre les framework Foundation et Application kit.
Ton problème trouve sa solution justement dans l'application du principe MVC.
Ton model c'est un ensemble d'objets image. Une NSArray d'images. les boutons précédent et suivant sont associés à des IBAction dans le Controlleur qui permettent de se ballader dans le NSArray (ton Model). Tu as des méthodes de NSArray qui te permettent de le faire. Le tirage aléatoire d'un entier compris entre 1 et la taille de ta NSArray donne l'index de ton NSarray pour retrouver une image aléatoire.
N'oublie pas d'alimenter ton NSArray dans la méthode awakeFromNib de ton Controlleur à partir d'un fichier par exemple.
 
Merci manu.

Euh...ouch !

En fait, j'ai compris les principes de ce que tu m'as dit, enfin je pense (avec tontableau NS Array qui contient les images...etc). Mais je sais pas encore bien utilisé interface builder... Donc, j'ai du mal à voir ce que je dois faire d'abord...

J'attends mon bouquin sur cocoa, je bûche un peu, et je reviens bientôt à la charge...
 
J'ai fait vite fait un projet avec ce que tu demandes : par ici.

Bon moi aussi je débute en Cocoa et c'est peut-être pas top comme code. L'utilisation d'un tableau d'image comme le suggère Manu est sans doute mieux, mais bon ça fonctionne
laugh.gif


PS : J'ai le livre "Cocoa par la pratique" et je le trouve plutôt sympa
smile.gif
 
Merci Ludopac.

Je suis en train d'étudier ce que tu as fait. Je bloque sur un point. J'arrive pas à définir mes target pour mes boutons vers imageShowControl.... comme tu as fait.... qui pointent vers le nom des actions de imageshowControl apparemment.... (precedent, suivant...etc).
 
izostar3d a dit:
Merci Ludopac.

Je suis en train d'étudier ce que tu as fait. Je bloque sur un point. J'arrive pas à définir mes target pour mes boutons vers imageShowControl.... comme tu as fait.... qui pointent vers le nom des actions de imageshowControl apparemment.... (precedent, suivant...etc).

En fait, j'ai créé une sous classe de NSObject que j'ai appellé : "imageshowControl" , puis j'y ai ajouté des outlets (cadreImage, hasardBut, precedentBut et suivantBut) puis des actions (auhasard:, precedente: et suivante:). Ensuite j'ai créé les fichier .m et .h correspondant à cette sous-classe, puis j'ai fais "Classes"->"Instantiate"

Tu obtiens alors dans l'onglet "Instances" un petit cube bleu représentant la classe "imageshowControl'.

Pour qu'un bouton effectue une action, il suffit de cliquer sur ce bouton en maintenant le bouton ctrl enfoncé, puis de faire glisser la souris (tjrs avec ctrl enfoncé) jusqu'au petit cube bleu et là tu relâche . Le panneau Info s'affiche et tu peux connecter ton bouton à l'action que tu veux.

imageShow.jpg
 
En fait interface Builder permet en général de construire le Controlleur. Le controlleur est un objet qui est instance de NSObject. les attributs du Controller sont les IBOutlet. Par exemple le cadre qui reçoit une image est un IBOutlet. Pour faire le lien entre un nom d'outlet et l'élément de l'interface, tu tires le trait dans le sens de la circulation des données. donc de l'IBOutlet vers l'élément de l'interface.
Les boutons de ton interface déclenchent des actions donc des IBAction. ce sont des méthodes de ton controlleur. pour faire le lien tu tires le trait du bouton vers le controlleur et tu désignes (connectes) le nom de l'action correspondante.
Dans ton cas, tu déclares le NSArray comme un attribut du controlleur et tu l'initialises dans la méthode awakeFromNib qui est LA méthode par défaut qui est exécutée par le runtime cocoa avant d'afficher l'interface.
Comme je te l'ai dit, les méthodes précédent, suivant et aléatoire permettent de désigner l'objet du NSArray à afficher dans le cadre.

 
Une précision importante. Les méthodes d'un Controlleur qui sont des IBAction se distinguent des autres méthodes par le fait qu'elles ont la forme
- (void)maMethode:(id)sender;
sender indique l'objet qui a déclencher l'action. En effet on peut connecter plusieurs boutons à une même méthode. Le nom du sender determinera après un test la partie du code à exécuter dans la méthode.
Exemple les boutons suivant et précédent peuvent déclencher la IBAction changerImage. L'action consistant après le test d'incrémenter ou décrémenter l'index dans la NSArray de l'objet courant.
 
Merci Manu et Ludopac

En fait, tout ce qui est algo, il n'y a pas de problème je comprends (j'ai fait un peu de C et pas mal de php)... mais touts les concepts objets de cocoa, j'ai du mal. Vivement que ce bouquin arrive... Pour ce qui est de la POO en général, je connais les grands principes.

Encore une fois, je reviens vous dire où j'en suis dès que j'ai appris un peu plus sur cocoa...

merci.
 
Me revoilà.

Bon, j'ai réussi ma petite appli (ça va de suite un peu mieux après avoir lu le premier chapitre de cocoa par la pratique...).

Pas de problème pour les boutons random, précédent et suivant. Mais maintenant, je voudrais l'étoffer. Dans mon interface, j'ai mis les vignettes des images à afficher. Quand on clique sur la vignette, l'image doit d'afficher. J'ai rajouté un outlet et une action, rajouter le code dans les deux fichiers (.h et .m) mais ça ne marche pas... il ne se passe rien quand je clique sur la vignette (qui est une image). Impossible de la considérer comme un bouton ? J'ai fait le test en ajoutant un vrai bouton cocoa à la place et là ça marche...

D'autre part, j'ai aussi un bouton "play" qui va lire les images à la suite. Là pas de problème, il me faudrait juste rajouter une pause de X secondes entre chaque image. Je suis allé voir dans la doc, quelle classe utiliser ? NSTimer ? NSInterval ? et comment ?

Par avance merci.
 
Eh mon gars, Tu ne peux pas faire ce que tu fais. Il y a un principe de cocoa que t'as pas assimilé. C'est la notion Target/Action.
Je te renvoie ici pour que tu saisisses le concept. En effet ton image n'es pas un objet qui hérite d'un NSControl. seul objet suceptible de pouvoir interpreter un click de souris en une 'target/action'.
Pour la seconde question, tu peux utiliser un Timer pour exécuter à intervalle régulier une méthode particulière.
la lecture complète des article de ce chapitre
pourrons t'éclaicir pour la suite.