Autoresizing frame van UILabel bij het animeren van frame (grootte) van bovenliggende UIView

Ik heb een bovenliggende UIView met onderliggende UIView (UILabel gebruikt in de onderstaande code) waarvan het frame is ingesteld op de grenzen van de ouder en waarvan het autoresizing-masker is ingesteld op flexibele breedte en hoogte:

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";

Ik wil het frame van de bovenliggende weergave, met name de grootte, kunnen animeren en het formaat van de subweergave kunnen wijzigen als onderdeel van de animatie:

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

Als gevolg van deze animatie zou ik willen dat de tekst van het UILabel samen met de animatie van de bovenliggende weergave animeert, zodat u visueel ziet dat de tekst verschuift van gecentreerd op (160, 240) naar (80, 120). In plaats van het te animeren, lijkt het frame van de subweergave echter onmiddellijk te worden ingesteld op de waarde die het aan het einde van de animatie zou moeten hebben, zodat u ziet dat de positie van de tekst onmiddellijk springt wanneer de animatie start.

Is er een manier om subvensters automatisch te laten weergeven als onderdeel van een animatie?

14

1 antwoord

Ik heb niet helemaal mijn hoofd rond wat er aan de hand is, maar ik denk dat het kernpunt is dat UIKit de tekst niet elk frame van de animatie opnieuw moet renderen, dus de inhoud van een UILabel is niet animeerbaar . Standaard is de eigenschap contentMode van UILabel UIViewContentModeRedraw, wat betekent dat het het UILabel opnieuw zal tekenen op de doelgrootte zodra de eigenschap is ingesteld.

Als u de contentMode wijzigt in UIViewContentModeCenter, wordt de inhoud niet opnieuw getekend en blijft deze gecentreerd in het UILabel.

childLabel.contentMode = UIViewContentModeCenter;
20
toegevoegd
Geweldig genoeg !! Bedankt!
toegevoegd de auteur Kjuly, de bron
Dat is geweldige info. UIViewContentModeCenter werkt voor wat ik echt nodig heb - om de tekst gecentreerd te houden terwijl het frame van de bovenliggende weergave kleiner wordt of groeit. Bedankt.
toegevoegd de auteur Shane Arney, de bron