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