Mix xcode+quartz

On souhaite réaliser un diaporama avec effets graphiques. L’effet de base est illustré dans la vidéo suivante : exemple. La réalisation est en deux parties :

  1. réaliser une composition Quartz permettant d’animer l’affichage d’un ensemble d’images
  2. intégrer et piloter cette composition depuis une application MacOSX

Première partie : Quartz

Revenir sur votre composition Quartz d’animation (si vous n’en avez pas une fonctionelle, fabriquez en une simple).

  1. Modifiez votre composition de sorte à exporter certains paramètres comme des paramètres d’entrée, c’est-à-dire des paramètres dont les valeurs pourront être injectées depuis l’extérieur de la composition. Commencer par le paramètre contrôlant la vitesse de rotation. Sélectionner par clic doirt l’entrée du patch Quartz et choisir Publish Inputs. Choisir un nom adéquat pour l’export.
  2. Tester que ce paramètre est effectivement utilisable en sélectionnant l’onglet Parameters dans la barre d’outils. Modifiez la valeur directement dans le formulaire présenté et vérifier que cela fonctionne comme attendu.

Seconde partie : XCode

  1. Créer ou modifier une application xcode intégrant la composition Quartz précédente. Ajouter deux boutons, l’un de libellé +vite l’autre -vite.
  2. Ajouter une classe Cocoa descendante de NSObject contenant un attribut entier correspondant à la valeur vitesse et un Outlet de type QCView.
  3. Instancier via le constructeur d’interface un objet de la classe précédente. Établir le lien Outlet entre l’objet et la QCView.
  4. Établir un lien réactionnel (une Action) entre les boutons +vite et -vite et la classe de l’objet métier. Une action s’appellera plusVite et l’autre moinsVite.
  5. Modifier le code de ces méthodes de sorte à modifier en conséquence la valeur de l’attribut stocké par l’objet (afficher cette valeur via un appel à NSLog. Tester. Question : comment est initialisé l’attribut ? Est-ce la bonne valeur de départ ?
  6. Rechercher dans la document de la QCView comment modifier la valeur d’un paramètre exporté d’une composition Quartz jouée dans une QCView. Faire en sorte que les deux actions modifient le paramètre. Tester.

Troisième partie : XCode

  1. Rechercher dans la documentation comment une QCView peut en retour appeler du code contenu dans l’application (piste: cet appel est effectué sur une base temporelle). Implanter du code de sorte qu’une méthode de l’objet métier soit appelée sur une base temporelle (y placer un appel à NSLog).
  2. Rechercher dans la documentation comment les valeurs de paramètres de sortie de composition Quartz peuvent être consultées dans un code applicatif. Modifier la composition Quartz pour produire une valeur indiquant qu’il est temps de changer d’image. Rajouter une entrée publique à la composition permettant d’injeter une image NSImage.
  3. Modifier le code de sorte que lorsque cet indicateur est positionné, l’application change d’image tournante (on s’autorisera à basculer entre deux images pour commencer). Consulter la documentation de NSImage pour retrouver comment des images peuvent être lues depuis le système de fichiers.
  4. Modifier le code de sorte à ajouter un NSOpenPanel lorsqu’on choisit l’option Ouvrir du menu de l’application. Ce Panel devra permettre de choisir dans le système de fichiers un répertoire contenant des images (on pourra supposer que le répertoire contient effectivement des images et uniquement des images). Les images du répertoire seront utilisées dans l’ordre comme suite d’image à afficher par la composition animée.

Quatrième partie : cosmétique + extension…

  • Fournir une application au standard attendu : icône, etc
  • Définir une extension de fichier .dpr (.diaporama) reconnue par l’application dont le contenu pourra être une liste d’URL désignant des images qui seront utilisées lors de la projection