J'ai essayé de trouver un moyen décent d'animer un changement de taille de cadre sur un Uilabel, sans un saut de départ bizarre. Ce qui se passe par défaut, c'est que lorsque je fais quelque chose comme ça:
// Assume myLabel frame starts as (0, 0, 100, 200) [UIView beginAnimations:@"myAnim" context:NULL]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationCurve:UIViewAnimationCurveLinear]; [UIView setAnimationDuration:1.0]; myLabel.frame = CGRectMake(0.0, 0.0, 50, 100); [UIView commitAnimations];
5 Réponses :
Animation du cadre ne modifie pas la taille de la police. Si je comprends ce que votre comportement vous voyez, je pense que vous avez le Vous pourriez essayer d'élargir la transformation de l'étiquette de sorte que l'échelle de la trame et de la police simultanément. p> réglage de la marque code> défini sur "true", donc vous voyez le cadre animé à la taille suivie du réajustement instantané de la taille de la police. p>
En fait non, ce n'est pas le cas. Le RéglfontSizetofitThewidth n'est pas défini ici et je suis en fait pas i> essayer de changer la taille de la police, juste le cadre - qui est en jaune. Cependant, ce qui se passe est que le cadre DESTS (dans ce cas) "convient au texte, de sorte qu'il redessine d'abord que la couche s'étire pour s'adapter à la trame d'origine, puis la réduit. C'est pourquoi ça a l'air bizarre comme ça.
Pas sûr alors. C'est un problème intéressant. Je verrai si je ne peux pas le reproduire plus tard aujourd'hui. Je suis curieux moi-même.
Hourra pour répondre à une question morte de deux ans, mais j'ai trouvé la réponse. Soit dans l'interface Builder ou dans le code, modifiez la propriété contentmode code> de l'étiquette. Le vôtre semble être défini sur
ScaletOfill code>; essayez
gauche code> ou
droit code>. p>
Si je pouvais, je voudrais faire cette réponse avec 100! (Il saute toujours parfois, mais ça va)
TOPLETFT / Droite ou BottomFeft / Droite pourrait être la mesure de contenus correcte que vous souhaitez en fonction de l'animation exacte dont vous avez besoin.
Cela m'a sauvé la vie :)
Cette réponse 100% fonctionne, mais pour un peu plus de clarté, si mon .Textalignment code> était
.Centier code> comme dans:
myLabel.texttalignment = .Center code> , puis définissez le
.ContentMode code> à:
myLabel.contentMode = .center code>
Pour développer la réponse de @ Cliclcly: de l'aperçu de la documentation de Uilabel: P>
Le mode de contenu par défaut de la classe Uilabel est UIViewContentModeredraw. Ce mode provoque la vue de redessiner Contenu Chaque fois que son rectangle de liaison change. Vous pouvez changer ce mode en modifiant la propriété héritée de typeMode de la classe. p> blockQuote>
de la documentation de la propriété contentmode d'UIView: p>
La valeur par défaut de cette propriété est UIViewContentModeScaleToFill. p> blockQuote>
Les Uilabels se comportent différemment des autres uiviews par défaut car leur propriété de mode de contenu est différente par défaut. P>
désactive simplement la disposition automatique de votre étiquette. p>
en Xcode, cliquez sur l'étiquette, puis dans le volet Propriétés, décochez l'option de mise en page automatique p>
J'ai trouvé que les animations d'images UILabel sont bizarres - leur taille est définie à la taille immédiatement fin et le texte est rendu pour cette taille. Après que seul le changement de position est animée, ce qui signifie que si la taille de la destination est (0,0), l'étiquette disparaît immédiatement. Pour contourner cette limitation, je l'ai placé l'étiquette à l'intérieur d'une vue de la même taille que les clips, subviews Autoresizing désactivé pour l'étiquette, et je suis animant la superview de l'étiquette au lieu de l'étiquette elle-même. Le résultat final est que le cadre de l'étiquette est entièrement animé tout au long, mais le texte contenu n'est pas nouveau rendu avec, disons, une taille de police différente, ni ne change de troncature texte. Il est pas encore parfait, mais il est bon pour mon but. P>
Cadre initial: p>
p>
Au cours de l'animation: p>
p>
Animation terminé: p>
p>
Je ne peux pas croire croire que je ne connaissais jamais ceci à propos de Uilabels. Mais vous m'avez aidé à résoudre un problème qui m'avait totalement soulevé - merci!
C'est une vieille question mais je me laisse avec exactement le même problème. D'une manière ou d'une autre c'est illogique. Si je comprends bien les méthodes d'animation, vous devriez pouvoir animer la plupart des propriétés sur une classe UIView. Mais pourquoi la propriété-cadre d'un Uilabel se comporte-t-elle différemment lorsqu'elle est animée qu'une sous-classe UIView normale. On dirait que la classe Uilabel ignore l'animation pour la taille et n'anime que le changement de localisation. Qui crée une animation plutôt étrange. J'apprécierais que quelqu'un puisse m'aider avec ça.