[CoreAnimation]Faire marcher les effets

TchouboudouTchouboudou Membre
18:37 modifié dans API AppKit #1
Bonjour

En cette belle veille de Noël, une question me taraude. Sur Interface Builder 3, il est possible de mettre des effets sur des view. Malheureusement, même après avoir essayé de comprendre la doc IB, je n'y arrive toujours pas.
D'où ma question : Comment qu'on fait :P ?

Merci d'avance,
Tchouboudou

Réponses

  • Philippe49Philippe49 Membre
    18:37 modifié #2
    Peux-tu préciser ton problème

    Voici une appli simple qui n'a pas ce problème
  • TchouboudouTchouboudou Membre
    18:37 modifié #3
    En effet, ça marche bien avec les ombres et la transparence. Mais, en fait, je cherche plus à  faire marche les effets comme Ripple, Fade, Page Curl, etc.
  • Philippe49Philippe49 Membre
    décembre 2007 modifié #4
    Oui là  c'est pas la doc IB qui faut lire, mais Core Animation & co

    Voici un second essai, mais un tri s'impose sur tous les effets.
    Tu as un lien sur une présentation ordonnée de tous ces effets ?

    [EDIT] remarque qu'en cliquant sur le ? Help, on salive déjà 
    CoreImageFilterReference
  • TchouboudouTchouboudou Membre
    18:37 modifié #5
    En fait, je cherche à  faire les transitions. Dans la doc IB, il en parle par ici. Mais, pour être franc, j'y comprend pas grand chose (mes notions des Core sont assez vagues).
  • Philippe49Philippe49 Membre
    18:37 modifié #6
    Oui j'essayais la même chose et la signification des différents paramètres est encore obscure.
    Pour l'instant, on fait une animation d'une image de départ à  une image cible : c'est le principe de NSViewAnimation .

    J'ai l'impression que toi et moi on a besoin de plonger dans l'ensemble de la doc. Il va falloir "quelques instants" pour bouquiner : Core Animation, Core Image , doc IB ...
  • TchouboudouTchouboudou Membre
    18:37 modifié #7
    Je sais même pas afficher une CIImage :D C'est mal parti...
  • Philippe49Philippe49 Membre
    18:37 modifié #8
    dans 1198753015:

    En effet, ça marche bien avec les ombres et la transparence. Mais, en fait, je cherche plus à  faire marche les effets comme Ripple, Fade, Page Curl, etc.

    Au moins, tu peux utiliser Core Image Fun House (clic droit sur une image, ouvrir avec) pour voir ce que signifie chacune des propositions, et les paramètres correspondants.
  • MalaMala Membre, Modérateur
    18:37 modifié #9
    dans 1198761103:

    J'ai l'impression que toi et moi on a besoin de plonger dans l'ensemble de la doc. Il va falloir "quelques instants" pour bouquiner : Core Animation, Core Image , doc IB ...


    Cela me rassure, je ne suis pas le seul à  trouver cela obscure. Ce que je ne comprends pas c'est pourquoi on devrait fournir des images de départ et d'arrivé? Ce n'est pas IB qui s'en charge en capturant les vues?

    Quelqu'un a déjà  réussi a faire fonctionner les transitions d'IB 3?
  • Philippe49Philippe49 Membre
    18:37 modifié #10
    Certaines, j'y travaille.
    Pour l'instant je bute un peu sur les filtres.
    Mais quand on cherche un peu sur le net, j'ai l'impression que tout cela est en débroussaillage.
  • Philippe49Philippe49 Membre
    18:37 modifié #11
    dans 1200496043:

    Ce que je ne comprends pas c'est pourquoi on devrait fournir des images de départ et d'arrivé? Ce n'est pas IB qui s'en charge en capturant les vues?


    A priori, il semble que les effets de IB fassent référence à  des images de la bibliothèque, donc mises en ressource (voir les pop-up)
    Dans le code que j'ai vu, pour appliquer les effets, on capture soi-même le contenu voulu.
  • MalaMala Membre, Modérateur
    18:37 modifié #12
    dans 1200496414:

    Certaines, j'y travaille.
    Pour l'instant je bute un peu sur les filtres.

    Oui, très beau travaille, j'ai été zieuter ton site.

    Pour le filtres, as-tu regardé de ce côté?
    http://theocacao.com/document.page/528
    Je m'en suis inspiré dans un appli pour faire un filtre goutte d'eau lorsqu'on clique sur une zone insensible de l'interface (La métaphore du coup d'épée dans l'eau! :P ).
  • Philippe49Philippe49 Membre
    18:37 modifié #13
    Oui j'ai vu, et je me suis inspiré du travail de Theocacao qui a fait un travail sympa. il y a encore des solutions à  explorer là -dedans.
    En fait, j'ai correctement mis au point le filtre CIBloom (une sorte de flou) dans la page Filter_Frame_Animation qui ressemble au filtre goutte d'eau et je bute pour l'instant sur le filtre CIPerspectiveTile qui me renvoie un message d'erreur sur la ROI (region of interest) .

      CoreImage: ROI is not tilable:
    APPLY perspectiveTile ROI [449,0 31x360] RGBA_14
    AFFINE [1 -0 -0 1 -16384 -16384] DOD [-16384,-16384 32768x32768] ROI [-16384,-16384 32768x32768] ARGB_8
      IMAGE CIImage:0x30e98 DOD [0,0 32768x32768] ARGB_8


  • MalaMala Membre, Modérateur
    18:37 modifié #14
    Ce ne serait pas lier au fait que ce flltre retourne une CIImage de taille "infinie" qu'il faut rogner?
  • Philippe49Philippe49 Membre
    18:37 modifié #15
    <br />-(void)awakeFromNib<br />{<br />&nbsp; &nbsp; &nbsp;  ...<br /><br />	NSImage * nsimage=[NSImage imageNamed:@&quot;bye_bye_eternity.jpg&quot;];<br />	NSBitmapImageRep * bitmapImageRep=(id)[nsimage bestRepresentationForDevice:nil] ;<br />	image=CGImageRetain([bitmapImageRep CGImage]);<br />	imageLayer.contents=(id) image;<br />	<br />	// image layer : Filter<br />	CIFilter * tileFilter=[CIFilter filterWithName:@&quot;CIPerspectiveTile&quot;];<br />	[tileFilter setDefaults];&nbsp; <br />	[tileFilter setValue:[CIImage imageWithCGImage:image] forKey:@&quot;inputImage&quot;];<br /><br />	[tileFilter setValue:[CIVector&nbsp; vectorWithX:10. Y:120.] forKey:@&quot;inputTopLeft&quot;];<br />	[tileFilter setValue:[CIVector&nbsp; vectorWithX:80. Y:100.] forKey:@&quot;inputTopRight&quot;];	<br />	[tileFilter setValue:[CIVector&nbsp; vectorWithX:15. Y:10.] forKey:@&quot;inputBottomLeft&quot;];<br />	[tileFilter setValue:[CIVector&nbsp; vectorWithX:90. Y:15.] forKey:@&quot;inputBottomRight&quot;];	<br />	<br />	[imageLayer setFilters:[NSArray arrayWithObject:tileFilter]];<br />	[tileFilter setName:@&quot;tileFilter&quot;];	<br /><br />}<br />
    


    Le choix des paramètres correspond au parallélogramee de l'une des "tuiles" de l'image, du moins c'est ce que j'ai compris dans Core Image Fun house.

    Le problème c'est que je ne vois pas trop comment le filtre et le layer communiquent.
    Je pensais que le setFilter: créait le lien.
  • MalaMala Membre, Modérateur
    18:37 modifié #16
    De ce que j'ai compris, le setFilter associe le filtre au layer mais ne sait pas forcément quel paramètre animer quand le filtre n'a pas une base de temps (attribut inputTime pour les filtre de transition comme l'effet goûte d'eau). Dans le projet d'exemple "menu" sur Core Animation, il définissent par exemple explicitement le paramètre à  animer avec keypath...
    <br />pulseAnimation.keyPath = @&quot;filters.pulseFilter.inputIntensity&quot;;<br />
    


    Je n'ai pas l'impression que l'on puisse jouer sur plus d'un paramètre. Et quiz des CIVector? Les exemples se bornent à  un NSNumber.
  • MalaMala Membre, Modérateur
    janvier 2008 modifié #17
    Un petit test semble confirmer mes dires sur le crop.

    <br />&nbsp; &nbsp; CIFilter * tileFilter=[CIFilter filterWithName:@&quot;CIPerspectiveTile&quot;];<br />&nbsp; &nbsp; [tileFilter setDefaults];&nbsp; <br />&nbsp; &nbsp; <br />&nbsp; &nbsp; CIFilter * cropFilter = [CIFilter filterWithName:@&quot;CICrop&quot;];<br />&nbsp; &nbsp; [cropFilter setDefaults];&nbsp; <br />&nbsp; &nbsp; <br />&nbsp; &nbsp; CIVector *rectangle = [CIVector vectorWithX:0 Y:0 Z:windowRect.size.width W:windowRect.size.height];<br />&nbsp; &nbsp; [cropFilter setValue:rectangle forKey:@&quot;inputRectangle&quot;];<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; myLayer.filters = [NSArray arrayWithObjects:cropFilter,tileFilter,nil];<br />
    


    En faisant le crop, ça marche. J'obtiens une mosaà¯que d'images en perspective sur mon layer. Par contre, c'est bizarre, lorsqu'on construit le NSArray à  mettre dans filters, il faut déclarer le crop avant le title. L'inverse m'aurait semblé plus logique.
  • Philippe49Philippe49 Membre
    18:37 modifié #18
    Ok merci, cela marche ainsi. Il fallait bien réduire la taille de l'image par le filtre CICrop 


    dans 1200523446:

    Et quiz des CIVector? Les exemples se bornent à  un NSNumber.


    Cela marche aussi bien
  • Philippe49Philippe49 Membre
    18:37 modifié #19
    La suite de cette fin de discussion à  ce post
  • Philippe49Philippe49 Membre
    18:37 modifié #20
    Bon une avancée sur ce sujet, petite mais vigoureuse. 

    Mais plein de questions encore non résolues. Alors si il y a une bonne volonté qui veut me donner un coup de main.
Connectez-vous ou Inscrivez-vous pour répondre.