Core Animation et effets dans IB

hdexhdex Membre
17:46 modifié dans API AppKit #1
Salut a tous les cocoaculteurs et autres amateurs de chocolat (c'est la saison).

Je suis en train de fignoler une de mes applis et Core animation me simplifie bien la vie.

J'ai toutefois une petite question ...(vous saviez bien que ça allait venir ...)

J'ai besoin d'afficher une fenêtre et de la faire disparaitre apres quelques secondes.
C'est une facon de faire des notifications genre Growl mais sans Growl (je ne cherche pas à  ré-inventer la roue, juste avoir un systemes d'alerte basique si Growl n'est pas installé).

J'ai donc ajouté 2 effets dans IB pour ma fenetre (ripple pour "order in" et dissolve pour "order out") et ajouter le code suivant :
affichage de la fenetre
[[calvaWindow animator] orderFront:self];

ferme la fenetre
[[calvaWindow animator] orderOut:self];


Je savais d'avance que "ripple" ne marcherait pas chez moi (Mac trop vieux - pas de Core Image) mais "dissolve" ne marche pas non plus.
Quelqu'un saurait si c'est aussi a cause de Core Image (je pensais qu'une partie des fonctions CI pouvait être simulé) ou faut il coder autrement.

En attendant, je simule "dissolve" en rendant la fenêtre transparente ...

Merci d'avance,

Réponses

  • Philippe49Philippe49 Membre
    17:46 modifié #2
    Après quelques recherches, j'en ai été arrivé à  ce résultat :

    http://web.mac.com/philippe.robinet/Core_Animation/filtres_IB.html


  • Philippe49Philippe49 Membre
    17:46 modifié #3
    Si tu trouves mieux, merci de le signaler à  tous.
  • hdexhdex Membre
    17:46 modifié #4
    Après quelques tests et recherches, il semble que les effets dans IB sont effectivement valables pour des vues au sein d'une fenetre.

    De plus orderFront et orderOut agissent immediatement donc Core Animation n'a rien a faire.

    Donc pour faire simple, je ne fais pas d'effet à  l'affichage :
    <br />[[calvaWindow animator] setAlphaValue:1.0];<br />[calvaWindow orderFront:self];<br />
    


    et je ferme la fenetre avec :
    <br />[[callerIDWindow animator] setAlphaValue:0.0];<br />
    


    La question subsidiaire ... pourquoi ça fonctionne la première fois mais pas les suivantes ?

    Ma fenêtre est une NSPanel (case Utility et HUD cocher) et "release when deactivated" n'est pas coché.
  • Philippe49Philippe49 Membre
    17:46 modifié #5
    dans 1206935119:

    Après quelques tests et recherches, il semble que les effets dans IB sont effectivement valables pour des vues au sein d'une fenetre.

    Je ne comprends pas. Toutes les vues sont au sein d'une fenêtre.
    La question est : est-ce que ces effets peuvent agir sur une sous-vue de la content view, ou est-ce limité à  la content view ?
    Personnellement, à  ce jour, je n'ai pas réussi à  les faire fonctionner sur une sous-vue, ce qui limite grandement l'intérêt de la chose.

    dans 1206935119:

    La question subsidiaire ... pourquoi ça fonctionne la première fois mais pas les suivantes ?

    L'exemple dans la page que je donne en référence ci-dessus marche plusieurs fois.
    Cela doit dépendre de l'endroit où tu as réglé l'effet dans IB. Si tu l'as mis dans Order In, ou oRder Out, c'est clair que cela ne fera qu'à  l'apparition/disparition de la fenêtre.
Connectez-vous ou Inscrivez-vous pour répondre.