Animieren Frame von UILabel reibungslos

8

Ich habe versucht, einen vernünftigen Weg zu finden, um eine Framegrößenänderung auf einem UILabel reibungslos zu animieren, ohne einen komischen Startsprung zu machen. Was passiert standardmäßig, wenn ich so etwas mache:

%Vor%

Ich bekomme eine glatte Animation mit dem Label, aber die Art und Weise, wie es das tut, ist, dass es die neu gezeichnete Image-Ebene für die Zielgröße des Labels verwendet und den Inhalt dann an den aktuellen Wert anpasst animiert zum Ziel rect. Dies endet mit einem sehr bizarren Sprung in der Textanzeige. Hier sind zwei Bilder, die das Aussehen der Voranimation zeigen, und dann gleich nach dem Start der Animation:

Voranimation

Post-Animation

Ich habe versucht, nur die Ebene zu verwenden, um dies zu animieren, aber ich bekomme immer noch die gleichen Probleme.

Die Frage ist also, wie kann ich das vermeiden?

Danke für jede Hilfe,
Scott

    
Scott Little 13.11.2009, 14:35
quelle

5 Antworten

30

Hurra, um eine zwei Jahre alte Frage zu beantworten, aber ich habe die Antwort gefunden. Ändern Sie im Interface Builder oder im Code die Eigenschaft contentMode des Labels. Dein scheint auf scaleToFill eingestellt zu sein; probiere left oder right .

    
cliclcly 06.07.2011 20:42
quelle
7

Um @ cliclclys Antwort zu erweitern: Aus der Übersicht der UILabel-Dokumentation:

  

Der Standard-Inhaltsmodus der UILabel-Klasse ist   UIViewContentModeRedraw. Dieser Modus bewirkt, dass die Ansicht neu gezeichnet wird   Inhalt jedes Mal, wenn sich das Begrenzungsrechteck ändert. Du kannst ändern   diesen Modus durch Ändern der geerbten contentMode -Eigenschaft des   Klasse.

Aus der Dokumentation der Eigenschaft contentMode von UIView:

  

Der Standardwert dieser Eigenschaft ist UIViewContentModeScaleToFill.

UILabels verhalten sich standardmäßig anders als andere UIViews, da ihre contentMode-Eigenschaft standardmäßig unterschiedlich ist.

    
titaniumdecoy 02.10.2012 00:53
quelle
5

Ich fand, dass UIlabel-Frame-Animationen seltsam sind - ihre Größe wird sofort auf die Endgröße gesetzt und der Text wird für diese Größe gerendert. Danach wird nur die Positionsänderung animiert, dh wenn die Zielgröße (0,0) ist, verschwindet das Label sofort. Um diese Einschränkung zu umgehen, habe ich das Label in einer Ansicht von derselben Größe platziert, die Subviews schneidet, die Autoresizing-Funktion für das Label deaktiviert und den Superview des Labels statt des Labels selbst animiert. Das Endergebnis ist, dass der Etikettenrahmen durchgehend vollständig animiert ist, aber der enthaltene Text nicht erneut gerendert wird, z. B. mit einer anderen Schriftgröße, oder die Textabkürzung ändert sich nicht. Es ist immer noch nicht perfekt, aber es ist für meinen Zweck geeignet.

Anfangsrahmen:

Während der Animation:

Animation beendet:

    
user3099609 06.03.2014 12:32
quelle
0

Das Animieren des Rahmens animiert nicht das Ändern der Schriftgröße. Wenn ich das Verhalten, das Sie sehen, verstehe, denke ich, dass die adjustsFontSizeToFitWidth des Labels auf "True" gesetzt ist, so dass Sie sehen, wie der Frame auf die Größe animiert wird, gefolgt von der sofortigen Anpassung der Schriftgröße.

Sie könnten versuchen, die Transformation der Beschriftung zu skalieren, so dass Rahmen und Schrift gleichzeitig skaliert werden.

    
TechZen 13.11.2009 15:58
quelle
-3

Deaktivieren Sie einfach das automatische Layout für Ihr Etikett.

Klicken Sie in Xcode auf das Label und deaktivieren Sie dann im Eigenschaftsfenster die Option für automatisches Layout

    
farid98 23.12.2013 18:39
quelle

Tags und Links