Autoresizing frame of UILabel lors de l'animation du cadre (taille) de UIView parent

J'ai un parent UIView qui a un enfant UIView (UILabel utilisé dans le code ci-dessous) dont le cadre est défini sur les limites du parent et dont autoresizingMask est défini sur la largeur et la hauteur flexibles:

UIView* parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
UILabel* childLabel = [[UILabel alloc] initWithFrame:parentView.bounds];
childLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
childLabel.textAlignment = UITextAlignmentCenter;
childLabel.text = @"Hello";

Je souhaite pouvoir animer le cadre de la vue parent, en particulier sa taille, et redimensionner la sous-vue dans le cadre de l'animation:

[UIView animateWithDuration:1.0 animations:^{ parentView.frame = CGRectMake(0, 0, 160, 240); }];

À la suite de cette animation, j'aimerais que le texte de UILabel s'anime en même temps que l'animation de la vue parent. Vous verrez ainsi le texte bouger d'un centre à l'autre (160, 240) à (80, 120). Cependant, au lieu de l'animer, il apparaît que le cadre de la sous-vue est immédiatement défini sur la valeur qu'il devrait avoir à la fin de l'animation, de sorte que la position du texte saute immédiatement au début de l'animation.

Existe-t-il un moyen de redimensionner automatiquement les sous-vues dans le cadre d'une animation?

14

1 Réponses

Je ne comprends pas tout à fait ce qui se passe, mais je pense que le problème fondamental est qu'UIKit ne veut pas être obligé de refaire le rendu du texte à chaque image de l'animation. Le contenu d'un UILabel n'est donc pas animable. . Par défaut, la propriété contentMode de UILabel est UIViewContentModeRedraw, ce qui signifie qu'elle redessine UILabel à la taille cible dès que la propriété est définie.

Si vous changez le contentMode en UIViewContentModeCenter, le contenu ne sera pas redessiné et restera centré dans le UILabel.

childLabel.contentMode = UIViewContentModeCenter;
20
ajouté
Assez bien !! Merci!
ajouté l'auteur Kjuly, source
C'est une bonne information. UIViewContentModeCenter fonctionne pour ce dont j'ai réellement besoin - pour que le texte reste centré pendant que le cadre de la vue parent se réduit ou s'agrandit. Merci.
ajouté l'auteur Shane Arney, source