2009-07-10 39 views
3

蘋果的drawTextInRect文檔似乎表明這是可能的。可以重寫UILabel的drawTextInRect方法來更改UILabel文本的大小嗎?

「通過這種方法被調用的時候,當前圖形上下文已與默認環境和文本顏色繪製配置在你重寫的方法,你可以進一步配置當前的上下文,然後調用super來做實際的繪圖,或者你可以自己做繪圖,如果你自己渲染文本,你不應該調用super。「

但是從我的UILabel子類下面的例子(我已經證實獲取調用)不會導致文本大小,無論我指定哪些文本大小而改變。我是否抓住了正確的環境,或者錯過了更大的東西?

- (void)drawTextInRect:(CGRect)rect{ 

    CGContextRef theContext = UIGraphicsGetCurrentContext(); 
    CGContextSetFontSize(theContext, 32.0); // <-- doesn't change text size 

    [super drawTextInRect:rect]; 
} 

注 - 文本大小不是我需要改變有關文本的唯一的事情,但如果我能得到的文本大小來改變我敢肯定,我需要做其餘的改動會很容易。

回答

1

我認爲對[super drawTextInRect:rect]的調用也會設置字體大小,撤銷對CGContextSetFontSize的調用。如果你想這樣做,你可能必須自己做所有的繪圖,而不是調用super的實現。

1

UILabel的drawTextInRect方法設置文本大小(以及字體和其他設置)本身,覆蓋您的大小。如果你想改變字體大小,爲什麼你不使用setFont:method或minimumFontSize屬性?

+0

我只是試圖讓drawTextInRect做任何事*。我真正的目標是讓UILabel文本具有一個像素的黑色輪廓邊框: http://stackoverflow.com/questions/1103148/how-do-i-make-uilabel-display-outlined-text – 2009-07-10 09:47:52

2

我以爲我們昨天有這個......
你可以相信appKit超類將設置字體,顏色和東西到你在InterfaceBuilder中設置的設置,所以試圖覆蓋這個行爲是完全徒勞。你可以做的,就是按摩參數進入繪製函數改變功能...嘗試這樣的事:

- (void)drawTextInRect:(CGRect)rect{ 

    CGFloat newWidth = rect.size.width * 0.75; // 3/4 the original width 
    CGFloat newHeight = rect.size.height * 0.812; // and a little less tall. 

    CGRect newRect = CGRectMake(rect.origin.x,rect.origin.y,newWidth,newHeight); 

    [super drawTextInRect:newRect]; // draw text into the NEW rect! 
} 

另外,尼古拉是正確的:如果你想改變字體,然後調用setfont程序!

+0

是的,你的昨天的建議似乎是追求的最佳途徑 - 這實際上是我現在詢問drawTextInRect的原因。 我只問過字體大小,因爲我試圖將這個例子煮沸 - 我想如果我可以改變字體的大小,我也可以改變它的填充和描邊以及我需要的大綱文本的顏色。 儘管上面發佈的代碼片段有所幫助,但在知道如何使drawTextInRect爲我的UILabel子類文本添加輪廓時,我仍然處於廣場附近。但我真的很感謝迄今爲止的幫助! – 2009-07-10 11:03:43

4
/* use CGContextSetLineWidth() and CGContextSetStrokeColorWithColor() 
to adjust your outline settings: directly preceding StrokeRect() */ 


- (void)drawTextInRect:(CGRect)rect{ 

    [super drawTextInRect:rect]; // let super do the work 

    CGContextStrokeRect(UIGraphicsGetCurrentContext(),rect); 
} 
+0

剛剛嘗試過,它在整個UILabel周圍繪製了一個輪廓,而不是圍繞文本字母。雖然謝謝!說真的,你們真棒。 – 2009-07-10 13:05:38

1

您不要在委託方法中這樣做。你需要獲得一個指針(IBOutlet)給UILabel。

然後,您可以用UILabel的的setText設置UILabel的字體,氣魄等:方法

+0

我認爲我在這個問題中引用了蘋果文檔中的引用可能導致我誤入歧途。 「你可以進一步配置當前上下文」的部分讓我覺得我可以在drawTextInRect委託中將我的一個像素邊框添加到由UILabel顯示的單個字母。這看起來不是這樣嗎?我希望有* setTextOutlineColor *和* setTextOutlineWidth *方法 - 這將是很好的! – 2009-07-10 13:12:03

2

你可以嘗試設置的UILabel的字體:

UIFont *font = [UIFont fontWithName:@"Courier" size:32]; 
[self setFont: font]; 
[super drawTextInRect:rect];