iPhone SDK Кварцевый глиф Рисование - PullRequest
1 голос
/ 24 февраля 2010

Я пытаюсь визуализировать глифы шрифтов в определенной точке с некоторой точностью, и у меня возникли некоторые проблемы с этим.

Начнем с того, что значение текстовой позиции Y никогда не меняется, поэтому я не могу получить высоту глифа вообще. Например, в следующем коде утверждение всегда срабатывает:

CGContextSelectFont(g, "Arial", 32.0f, kCGEncodingFontSpecific);

char c = 'A';
CGPoint pt = CGPointMake(400, 400);

CGContextSetTextDrawingMode(g, kCGTextInvisible);
CGContextSetTextPosition(g, pt.x, pt.y);
CGContextShowText(g, &c, 1);

CGPoint pt2 = CGContextGetTextPosition(g);
assert(pt2.y != pt.y);

Я попытался обойти это, используя некоторые жестко запрограммированные отношения ширины к высоте, предполагая, что глифы линейно масштабируются. Обратите внимание, что значение X текстовой позиции обновляется правильно.

Более важно, однако, то, как визуализируется глиф относительно позиции текста; некоторые глифы отображаются со значением Y в качестве центра глифа, некоторые используют значение Y как верхнюю часть глифа, а другие используют значение Y как нижнюю часть глифа. Я не могу жестко закодировать все эти данные и надеюсь, что мое приложение будет готово в любое время в этом году.

Что-то я делаю неправильно в приведенном выше коде чертежа? Я не могу найти никаких ссылок в документации по Кварцу, связанных с вертикальным выравниванием, и я немного растерялся.

1 Ответ

0 голосов
/ 24 февраля 2010

Из того, что я увидел, это довольно сложная задача. Я бы посмотрел библиотеку zynga LabelFont и либо поучился на их коде, либо просто использовал библиотеку. Особенно обратите внимание на метод класса drawTextInRect: класса LabelFont.

...