2013-05-29 80 views
1

模仿UILabel的方向變化行爲由於性能方面的原因(在我的子類UITableViewCell中),我正在試驗直接使用drawRect繪製文本,而不是添加UILabel子視圖。使用drawRect

而且爲了讓文字在方向改變重繪,我設置視圖的contentModeUIViewContentModeRedraw

- (id)initWithFrame(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self setContentMode:UIViewContentModeRedraw]; 
    } 
    return self; 
} 

- (void)drawRect:(CGRect)rect 
{ 
    [@"foo" drawInRect:CGRectInset(rect, 10, 10) 
       withFont:[UIFont systemFontOfSize:14] 
     lineBreakMode:NSLineBreakByWordWrapping]; 
} 

滾動的速度要快得多,現在,這一切完美的作品– 幾乎

問題是:在視圖動畫化其接口方向旋轉動畫時,文本出現扭曲/拉伸。它在取向前後看起來不錯,但在期間動搖了

有什麼辦法可以防止視圖拉伸,基本上模仿UILabel在接口旋轉時的行爲方式嗎?

回答

2

嘗試UIViewContentModeTopLeft。這就是我在應用程序的相同情況下解決它的方式。這將防止縮放。 (見https://stackoverflow.com/a/3456973/1445366)。

+0

有趣! (爲了使這種方法起作用,我必須在'willAnimateRotationToInterfaceOrientation'內調用'setNeedsDisplay')。它變得非常接近:文本本身不再伸展,並且與UILabel類似地進行動畫處理。但是現在*整個視圖*也是這樣動畫的。它不是非常明顯,但*視圖的*框架不再平滑動畫。 – Emmett

+0

是的,這是使用'drawRect'解決這個問題的缺點之一 - 你不能給每個單獨的項目一個單獨的'contentMode'。 –