Comment faire un texte défillant
prepa75
Membre
Bonjour à tous,
je me demandais comment faire pour avoir un texte qui défile dans un label,existe-il une fonction qui le fait facilement ou faut-il utiliser un timer ?? ???
je me demandais comment faire pour avoir un texte qui défile dans un label,existe-il une fonction qui le fait facilement ou faut-il utiliser un timer ?? ???
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'avais tout fait avec CoreAnimation :
- ma classe MarqueeLabel dérive de UIView
- Dans son init, elle se rajoute un UILabel en subview
- Dans ma méthode setText de cette nouvelle classe, j'affecte le texte passé en paramètre comme texte du UILabel interne, et je calcule la largeur du texte (cf doc "NSString UIKit Addition") pour redimentionner mon UILabel correctement (pour que le texte tienne dedans). Du coup mon UILabel peut tout à fait être plus large que la UIView dans laquelle il est (sa superview, la MarqueeLabel justement, donc), et c'est très bien justement
- Dans ma méthode startAnimating, j'utilise CoreAnimation pour animer la modification de la frame du UILabel interne (pour modifier son origine, je la fait passer de x=0 à un x négatif vallant [tt]self.bounds.size.width - label.bounds.size.width[/tt], en gros). C'est CoreAnimation qui se charge de faire le défilement, moi je fais juste que modifier la frame du label, le reste avec CA est tout automatique :
- Une fois l'animation terminée, CoreAnimation me le signale (appel d'une methode delegate, ça aussi c'est prévu dans CoreAnim) et dans ce cas j'avise, par exemple je lance l'animation dans l'autre sens pour remettre le label au début.
D'ailleurs en réalité je n'appelle même pas directement les méthodes de CoreAnimation et CALayer & co, j'utilise [UIView beginAnimations:... context:...] et [UIView commitAnimations]. Encore plus simple à manipuler.
merci pour ta réponse Ali , mais je suis largué dès la 1ere ligne
ce que j'ai compris c'est que je dois utiliser CoreAnimation et j'ai prévu de m'y mettre lorsque j'aurai bien géré les classes,ce qui n'est pas encore le cas :P
bref je pense réutiliser ta réponse dans quelques temps
autre question qui en découlle : vous me conseillé quoi comme support (de préférence français...) pour apprendre a utiliser CoreAnimation ?(livres, PDF , forums , tutos...)
tu créé une anim avec QC et tu la place dans ton nib
tu la bind avec la chaine de ton choix
A+JYT
Certes c'est en anglais, mais faut bien maà®triser l'anglais pour faire de la prog :P
Le CoreAnimation Programming Guide et le CoreAnimation Cook Book sont très bien.
Après, pour mon exemple, je me souviens quand j'avais implémenté ça qu'en réalité je ne me rendais même pas compte que j'utilisais CoreAnimation. Pas besoin de sortir l'artillerie lourde : ça se fait en moins de 10 lignes (si, si)
En effet, pour faire des animations avec CoreAnimation tu as deux possibilités :
La 2e solution est évidemment beaucoup plus simple à utiliser, et en plus est tout à fait suffisante dans ton cas. Au final ça ressemble à quoi à un truc comme ça : Là j'ai encadré le code qui change la frame d'un appel à "beginAnimations:... context:..." sur la classe UIView, et d'un "commitAnimations" à la fin, et ça suffit à la base.
Après, ici j'ai aussi rajouté un appel à setAnimationDelegate et setAnimationDidStopSelector qui permet de dire quel message envoyer (didStopSelector) -- et à quel objet l'envoyer (delegate) -- quand l'animation est terminée.
Ce qui te permet d'être informé quand l'animation (celle qui va changer la frame de ton UILabel et donc le faire défiler) est arrivée au bout : à ce moment tu peux par exemple relancer une autre animation (code du même genre) qui remet la frame d'origine (en 0,0) au label, pour qu'il reparte dans l'autre sens, etc...
Tu vois, c'est pas sorcier, et pas besoin de sortir QuartzComposer, des NSTimers dans tous les sens... ni même de s'y connaà®tre en CoreAnimation pour faire ça
Pour plus d'infos sur les méthodes de UIView qui permettent de gérer les animations (et t'éviter d'aller taper dans CoreAnimation toi-même), c'est cette partie de la doc de la classe UIView.
je me demandé s'il existait un book comme celui de Hillegass porté sur CoreAnimation.
je vais donc finir de bien maà®triser les bases et je m'y met après.
le prend pas mal Eaglelouk mais j'ai pas compris ton message ???
ah ok :P
Bon c'est pas la mort non plus, suffit de créer un CABasicAnimation, avec le keyPath @frame (puisque c'est la propriété "frame" que tu veux animer), et d'ajouter cette CABasicAnimation au layer de la NSView.
Il doit même y avoir tous les exemples qu'il faut dans le "CoreAnimation Cook Book" cité plus haut, voire sur les Sample Codes Apple.
Mais c'est vrai que pour le coup, un bon coup de lecture de la doc de CoreAnimation t'aidera à capter le tout.
oui je crois que je vais devoir m'y coller parsque la je suis particulierement perdu
pas grave ça arrive à tout le monde