2010-07-21 240 views
9

當增加標籤的高度時,一切都很好,很平滑。減少時,標籤會立即改變尺寸,然後用動畫重新定位。動畫UILabel尺寸減少

@interface 
@property (nonatomic, retain) IBOutlet UILabel *explanationLabel; 

@implementation 
CGRect frmExpl = explanationLabel.frame; 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.75]; 

frmExpl.size.height -= height; 
explanationLabel.frame = frmExpl; 

[UIView commitAnimations]; 

我試着用UIView替換UILabel,當然UIView沒有這樣的問題。

是否有任何特殊的方式來動畫UILabel大小減少動畫?

這是一個展示所述問題的最小項目。 Download

+0

你從哪裏得到frmExpl? – deanWombourne 2010-07-21 11:46:23

+0

從nib文件中設計的標籤框架。更新。 – Pablo 2010-07-21 11:50:32

+0

http://stackoverflow.com/questions/17360402/why-are-animations-on-bounds-of-an-uilabel-only-working-when-increasing-the-size – 2014-03-06 06:15:51

回答

2

我想你想改變的是邊界而不是框架。從該文檔:

「的邊界矩形來確定視圖的座標系中的原點和規模其框架矩形中和在的點處測量設置這個屬性相應地改變框架屬性的值。」 - UIView類; bounds屬性

試着這麼做:

- (void)animate:(id)sender 
{ 
    ... 
    CGRect newBounds = testLabel.bounds; 
    newBounds.size.height += 50; 
    testLabel.bounds = newBounds; 
    ... 
} 
+0

增加界限的確改變了框架,但框架屏幕上保持不變。減少邊界的作品。但這不是解決方案,因爲我需要增加和減少。我懷疑這是一個框架中的錯誤。 – Pablo 2010-07-22 00:06:30

+1

確實,這可能是一個錯誤。你能否改變你的視圖層次結構,使其具有藍色背景的UIView,然後是固定大小的UILabel,它的struts和spring被設置爲浮在UIView的中間。鑑於UIView動畫正確,可能是一個解決方案。 – 2010-07-22 20:59:49

14

的問題是,作爲的UILabel只要其大小變化重繪自己。 (它不能重繪動畫的每一幀,因爲文本渲染髮生在CPU上,而不是UIView動畫運行的GPU)。通過將標籤的contentMode屬性更改爲例如UIViewContentModeCenter,可以避免重繪。

+0

有事變了嗎?經過測試,這似乎不工作.. – 2014-10-18 11:00:48

+0

非常感謝,爲我工作 – 2014-11-15 16:42:06

+0

浪費了2天找出這個設置,謝謝! – dreampowder 2017-11-17 14:46:56

2

使用CGAffineTransform來做到這一點。

[UIView animateWithDuration:1.0 animations:^{ 
    // Scale down 50% 
    label.transform = CGAffineTransformScale(label.transform, 0.5, 0.5); 
} completion:^(BOOL finished) { 
    [UIView animateWithDuration:1.0 animations:^{ 
     // Scale up 50% 
     label.transform = CGAffineTransformScale(label.transform, 2, 2); 
    }]; 
}]; 
+0

它爲我工作,但它影響其他動畫,如淡入淡出UIView。你能告訴我如何解決這個問題,以及爲什麼這些動畫會發生衝突。我已經投票了你的答案。 – Developer 2012-12-16 22:06:20

+2

在UILables上使用affinetransformations有一些醜陋的副作用,如扭曲標籤上的文字。不是有用的解決方案。 – katzenhut 2013-11-04 13:26:08