2009-07-10 38 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];