2011-10-27 112 views
13

我有一個父UIView有子UIView(在下面的代碼中使用的UILabel)的框架設置爲父的邊界和其autoresizingMask設置爲靈活的寬度和高度:當UIView的UILabel的動畫框架(大小)的動畫化框架

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

我希望能夠以動畫父視圖的框架,特別是它的大小,並有子視圖作爲動畫的部分調整:

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

由於這部動畫我的結果會希望UILabel的文本與父視圖的a一起動畫nimation,所以在視覺上你會看到文本從(160,240)中心移動到(80,120)。但是,不是動畫,而是顯示子視圖的框架立即被設置爲它在動畫結束時應該具有的值,所以當動畫開始時,您會看到文本的位置立即跳轉。

有沒有辦法讓子視圖作爲動畫的一部分進行自動調整?

回答

20

我並不完全瞭解正在發生的事情,但我認爲核心問題是UIKit不希望在動畫的每一幀都重新渲染文本,所以UILabel的內容不具動畫性。默認情況下,UILabel的contentMode屬性是UIViewContentModeRedraw,意味着一旦屬性被設置,它就會以目標大小重繪UILabel。

如果將contentMode更改爲UIViewContentModeCenter,則內容將不會重繪並保持居中於UILabel。

childLabel.contentMode = UIViewContentModeCenter; 
+1

這是很好的信息。 UIViewContentModeCenter適用於我實際需要的功能 - 讓文本在父視圖的框架縮小或增長時保持居中。謝謝。 –

+0

太棒了!謝謝! – Kjuly