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