在NSButton子类中绘制文本 - 定位

时间:2009-12-21 01:14:36

标签: objective-c cocoa drawing custom-controls

我有一个自定义按钮: My Button http://cld.ly/29ubq

我需要将文本置于中心,这是我的代码:

NSMutableParagraphStyle *style =
    [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
[style setLineBreakMode:NSLineBreakByWordWrapping];
[style setAlignment:NSLeftTextAlignment];
att = [[NSDictionary alloc] initWithObjectsAndKeys:
           style, NSParagraphStyleAttributeName, 
           [NSColor blackColor],
           NSForegroundColorAttributeName, nil];
[style release];
// other Drawing code here
[[self title] drawInRect:[self bounds] withAttributes:att];

如何将文本置于按钮中心(不是边界的中心)?

2 个答案:

答案 0 :(得分:10)

您希望首先使用NSString -sizeWithAttributes:获取标题的大小。然后,您可以使用该大小来调整边界内的标题图。

这有一个诀窍,因为在这个过程中,你几乎总会在某一点上除以2。当你这样做时,你可能会得到一个半像素的结果,Cocoa很乐意使用它。但是,它会导致文本模糊。你几乎总是想在你的坐标上调用floor(),然后再画上它们,让自己回到整体像素上。

编辑:居中的一个基本例子(这应该正确编译,我没有编译它,我最近的工作已经在iPhone上颠倒了):

NSRect rect;
rect.size = [[self title] sizeWithAttributes:att];
rect.origin.x = floor( NSMidX([self bounds]) - rect.size.width / 2 );
rect.origin.y = floor( NSMidY([self bounds]) - rect.size.height / 2 );
[[self title] drawInRect:rect withAttributes:att];

无论如何,这些都是这样的。您可能希望因为按钮的绘制方式而略微偏移,但这是基本想法。

答案 1 :(得分:0)

您可能对Setting a Button’s Image感兴趣,这也解释了如何相对于按钮的图像定位标题。