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