Рисование текста в подклассе NSButton - позиционирование - PullRequest
1 голос
/ 21 декабря 2009

У меня есть пользовательская кнопка: Моя кнопка 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 ]

10 голосов
/ 21 декабря 2009

Сначала вы хотите получить размер заголовка, используя NSString -sizeWithAttributes:. Затем вы можете использовать этот размер, чтобы отрегулировать рисунок заголовка в ваших пределах.

В этом есть хитрость, поскольку в какой-то момент этого процесса вы почти всегда будете делить на два. Когда вы сделаете это, вы можете получить полупиксельный результат, который с удовольствием использует Какао. Тем не менее, это приведет к тому, что ваш текст будет размытым. Вы почти всегда хотите вызвать 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];

Во всяком случае, что-то в этом роде. Возможно, вы захотите немного сместить из-за того, как рисует ваша кнопка, но это основная идея.

0 голосов
/ 21 декабря 2009

Вас может заинтересовать Настройка изображения кнопки , которая также объясняет, как расположить заголовок относительно изображения кнопки.

...