Мне нужно нарисовать центрированный текст в CGContext.
Я начал с подхода Какао. Я создал NSCell с текстом и попытался нарисовать его так:
NSGraphicsContext* newCtx = [NSGraphicsContext
graphicsContextWithGraphicsPort:bitmapContext flipped:true];
[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:newCtx];
[pCell setFont:font];
[pCell drawWithFrame:rect inView:nil];
[NSGraphicsContext restoreGraphicsState];
Но CGBitmapContext, похоже, не отображает текст. Возможно, потому что мне нужно передать nil для параметра inView :.
Итак, я попытался переключить рендеринг текста на Core Graphics:
Самый простой способ - использовать CGContextSelectFont для выбора шрифта, используя его имя postscript и размер точки. , но CGContextShowTextAtPoint принимает только символы, отличные от Unicode, и нет очевидного способа уместить текст в прямоугольник: или вычислить размеры строки текста, чтобы вручную разложить прямоугольник.
Затем есть CGFont, который можно создать, и установить cia CGContextSetFont. Для рисования этого текста требуется CGContextShowGlyphsAtPoint, но опять же в CGContext не хватает функций для вычисления ограничивающего прямоугольника сгенерированного текста или для переноса текста в прямоугольник. Кроме того, не очевидно, как преобразовать строку в массив CGGlyph.
Следующий вариант - попытаться использовать CoreText для визуализации строки. Но классы Core Text чрезвычайно сложны, и хотя есть примеры, которые показывают, как отображать текст заданным шрифтом в прямоугольнике, нет примеров, демонстрирующих, как вычислить ограничивающий прямоугольник строки CoreText.
Итак. :