Рисунок кварцевого символа iPhone SDK

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

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

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 как нижнюю часть глифа. Я не могу жестко закодировать все эти данные и надеюсь, что мое приложение будет готово в любое время в этом году.

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


person Chris    schedule 24.02.2010    source источник


Ответы (1)


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

person Felixyz    schedule 24.02.2010
comment
Спасибо за ссылку. Я смотрел на это около недели назад, и это действительно не соответствует моим потребностям; это намного сложнее, и эти методы, в частности, кажутся гораздо более подходящими для динамического определения размеров. Мне не нужно менять глифы, чтобы они соответствовали прямоугольнику, мне нужен прямоугольник для глифа! - person Chris; 24.02.2010
comment
Обратите внимание на sizeWithZFont: в классе FontLabelStringDrawing. - person Felixyz; 25.02.2010