But : réaliser un diaporama pour MacOSX…
Technologies : Compositions Quartz, KVC
Première partie : Une composition Quartz
- Lancer
Quartz Composer
et créer une composition vierge (de type Basic Composition). - Ajouter à cette composition un Billboard, à l’aide de l’inspecteur, modifier sa largeur de sorte quelle soit égale à 2.
- Déclarer l’Input de nom image du Billboard comme étant une entrée publique (à l’aide du menu contextuel, Publish Inputs) et choisir un nom adéquat pour cette entrée (disons
image1
). Sauver la composition.
Seconde partie : Intégration d’une composition Quartz dans une application, Application Delegate, Outlets
- Lancer
xcode
et créer un projet OSX/Cocoa Application. - Éditer l’interface pour y ajouter un objet de type
QCView
. - À l’aide de l’inspecteur des propriétés, éditer l’objet
QCView
pour qu’il charge la composition Quartz créée, penser à le paramétrer. - Modifier le code
AppDelegate.h
pour y ajouter@property (weak) IBOutlet QCView *renderer;
(un Outlet est une propriété visible de l’éditeur d’interface à laquelle on peut associer un objet, c’est une propriété représentant une association au sens UML). Sauver le fichier. - Revenir à l’édition de l’interface et tirer un lien entre l’objet
App Delegate
et laQCView
, choisir l’outletrenderer
. Désormais l’objetApp Delegate
connaît laQCView
de l’interface via la propriétérenderer
(ils sont associés). - Observer les Connections de l’objet
App Delegate
et constater que cet objet est connu d’un autre de nomFile's Owner
via un Outlet à l’intérieur de celui-ci. Observer l’objetFile's Owner
et constater que sa classe estNSApplication
. Utiliser la documentation pour comprendre à quoi ces objets sont utiles. Pour le mécanisme de délégation, vous pouvez interroger les enseignants (ou rechercher sur le web). - Dans l’interface rajouter un bouton et lui associer le déclenchement de l’action
play:
de laQCView
. - Ajouter une image quelconque au projet (supposons qu’elle s’appelle
toto.jpg
). - Dans l’implémentation
AppDelegate.m
modifier le code de la méthodeapplicationDidFinishLaunching:
(en profiter pour consulter la documentation de cette méthode) en lui rajoutant le code suivant :NSImage *image = [NSImage imageNamed:@"toto"];
[self.renderer setValue:image forKeyPath:@ »patch.image1.value »]
; On en profitera pour lire la documentation relative à la classe `NSImage`. La seconde instruction correspond à l’association de l’image chargée à l’entrée de la composition Quartz (il peut donc être nécessaire de la modifier en conséquence).
Compiler (sans oublier de rajouter le framework Quartz.framework
au projet). Et Tester.
Troisième partie : Une composition Quartz plus complexe
- Modifier la composition Quartz (ou en créer une autre) avec deux Billboards dont les entrées seront toutes deux publiées sous le nom
image1
etimage2
par exemple. - Utiliser, Interpolation, Mathematical Expression et deux RGB Color afin de contrôler l’entrée Color des deux Billboards. Paramétrer l’interpolateur pour passer de la valeur 0 à la valeur 1 en trois secondes. Utiliser la sortie de l’inerpolateur pour modifier le canal Alpha (qui représente la transparence dans les couleurs) des deux RGB Color, lorsque l’un sera à la valeur x, l’autre sera à la la valeur 1-_x_. Les couleurs de sortie des RGB Color seront branchés en entrée des Billboards.
- Tester et mettre au point la compositionen utilisant le visionneur de paramètres (Parameters) afin d’y placer des entrées en test.
- Sauver cette composition.
Quatrième partie : Un diaporama plus complet (awakeFromNib, subclassing, …)
- Ajouter à l’application précédente une sous-classe de
QCView
de votre cru (MyQCView
). Modifier la classe duQCView
de l’interface pour qu’elle soit positionnée à la nouvelle classe créé. - Ajouter une seconde image à l’application.
- Modifier la nouvelle classe créé en surchargeant la méthode
startRendering
afin d’y positionner les deux entrées de la composition Quartz. - Compiler. Tester
Cinquième partie : Encore plus complet
- Modifier la sous-classe de
QCView
de sorte qu’à son extraction du fichier d’interface, un tableau d’images soit initialisé, avec un ensemble d’images contenues dans le bundle de l’application (surcharger la méthodeawakeFromNib
). - Surcharger la méthode
renderAtTime:arguments:
de sorte que les images d’entrée de la composition soient modifiées lorsque nécessaire afin d’obtenir un diaporama de l’ensemble des images chargées (consulter attentivement la documentation de cette méthode). - Modifier la composition, l’interface et le code de sorte que le temps de défilement entre les images soit un paramètre qui vaut 3 secondes par défaut et soit modifiable en temps réél via un slider et que les délais puissent varier de 1 à 10 secondes.