But : réaliser un diaporama pour MacOSX…
Technologies : Compositions Quartz, KVC
Première partie : Une composition Quartz
- Lancer
Quartz Composeret 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
xcodeet 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
QCViewpour qu’il charge la composition Quartz créée, penser à le paramétrer. - Modifier le code
AppDelegate.hpour 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 Delegateet laQCView, choisir l’outletrenderer. Désormais l’objetApp Delegateconnaît laQCViewde l’interface via la propriétérenderer(ils sont associés). - Observer les Connections de l’objet
App Delegateet constater que cet objet est connu d’un autre de nomFile's Ownervia un Outlet à l’intérieur de celui-ci. Observer l’objetFile's Owneret 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.mmodifier 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
image1etimage2par 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
QCViewde votre cru (MyQCView). Modifier la classe duQCViewde 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
startRenderingafin d’y positionner les deux entrées de la composition Quartz. - Compiler. Tester
Cinquième partie : Encore plus complet
- Modifier la sous-classe de
QCViewde 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.
