Animation de vues [Résolu]
BertrandMartin
Membre
Salut à tous.
Je développe en ce moment une application pour compter les points au tarot. Cela se présente comme suit : une fenêtre unique avec barre d'outils qui affiche une vue entièrement occupée par une NSTableView qui compile les scores de chaque tour (avec le total partiel). Puis, quand le tour est fini, on appuie sur un bouton de la barre d'outils qui décale cette vue vers le bas pour libérer un bandeau qui sert à afficher une autre vue avec des contrôles pour compter les points du tour (contrat, oudlers,primes ... )Puis, quand le décompte est fini, cette vue disparaà®t et la vue principale reprend sa place. Je suis arrivé à faire les deux vues, à afficher la vue principale ,soit en haut de la fenêtre, soit en bas. J'arrive également à afficher et masquer la vue accessoire. Tout marche bien, donc, je voudrai aller plus loin. En effet, la vue passe directement de position haute en position basse et je voudrai faire une animation, comme un paneau qui se baisse. Ou dois-je chercher dans la volumineuse documentation qui peut exister sur ce sujet ?
Je développe en ce moment une application pour compter les points au tarot. Cela se présente comme suit : une fenêtre unique avec barre d'outils qui affiche une vue entièrement occupée par une NSTableView qui compile les scores de chaque tour (avec le total partiel). Puis, quand le tour est fini, on appuie sur un bouton de la barre d'outils qui décale cette vue vers le bas pour libérer un bandeau qui sert à afficher une autre vue avec des contrôles pour compter les points du tour (contrat, oudlers,primes ... )Puis, quand le décompte est fini, cette vue disparaà®t et la vue principale reprend sa place. Je suis arrivé à faire les deux vues, à afficher la vue principale ,soit en haut de la fenêtre, soit en bas. J'arrive également à afficher et masquer la vue accessoire. Tout marche bien, donc, je voudrai aller plus loin. En effet, la vue passe directement de position haute en position basse et je voudrai faire une animation, comme un paneau qui se baisse. Ou dois-je chercher dans la volumineuse documentation qui peut exister sur ce sujet ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Salut pour les animations ce sont des fonction lié au view tu as une doc du programming guide :
http://developer.app...atingviews.html
Sinon la doc des UIView
http://developer.app...iew/uiview.html
Ce sont des méthodes relativement simple en gros ça donne ça
1) Utiliser NSViewAnimation
Je te le laisse regarder la doc. Ce n'est pas trop compliqué à comprendre, un peu plus à mettre en oe“uvre.
Ces animations sont assez limitées, ne gérant que le changement de frame et l'opacité, par contre, elle maintiennent le lissage des sous-pixels, ce qui est important pour le rendu du texte.
2) Utiliser Core Animation
Pour l'instant, je te déconseille d'utiliser CA directement, c'est à dire en modifiant les propriétés des CALayers.
Utilise plutôt le proxy de NSView:
Pour que ça fonctionne, il faut absolument que la vue ait une layer associée. Pour cela:
ou coche la case correspondante dans le XIB.
Enfin, il existe une classe NSAnimationContext, qui te servira essentiellement à changer la durée de l'animation.
Maintenant, autre truc : si on positionne sur une target-view deux subviews qui se superposent (intersection ou égalité entre les frames), que se passe-t-il : on voit les deux à la fois ? (comme des calques photoshop) C'est la denière arrivée qui prend le dessus ?..
Exact. Je m'en sert personnellement pour une fenêtre de préférences. Le fenêtre possède une NSToolbar. Cliquer un bouton ajuste la hauteur de la fenêtre, et en même temps retire les vues précédentes et ajout les nouvelles avec un fondu.
Quand on appelle la méthode -startAnimation.
Par défaut, je n'en suis pas sûr, mais je dirais autour d'une demi-seconde.
Comme NSViewAnimation hérite de NSAnimation, je suppose qu'on peut appeler initWithDuration:animationCurve:, plutôt qu'initWithViewAnimations:.
L'animation se fait en parallèle.
NSView maintient une hiérarchie ordonnée de vues. C'est la dernière subview qui sera au-dessus, mais forcément si elle n'est pas totalement opaque, on verra l'autre vue en dessous.
P.S.: Je n'ai pas été assez clair, mais je te conseille plutôt l'approche Core Animation dans cette application.
Puis, dans la méthode affichant le "round", je fais coulisser le "score". Je crée un NSValue empaquetant la frame d'arrivée puis je crée mon dictionnaire avec deux clées : la première indiquant la vue concernée (la vue du "score") et la seconde la frame d'arrivée. Puis je lance l'animation . Le résultat est exactement celui que je souhaitais : le "score" glissant vers le bas en dévoilant progressivement le "round". Et pour la méthode masquant le "round", je fais la même chose , en définissant la frame d'arrivée.