Что такое CoreText эквивалентный AppSit NSObliquenessAttributeName? - PullRequest
4 голосов
/ 28 февраля 2012

Я рисую текст в кросс-платформенном коде Mac / iOS, используя CoreText. Возможно, я использую шрифты, для которых не установлена ​​настоящая версия «Курсив», установленная в ОС для всех пользователей, но им нужно знать, что текст и тогда выделен курсивом.

С помощью NSAttributedString -drawAtPoint: от AppKit я могу использовать NSObliquenessAttributeName, чтобы сделать текст наклонным (и, таким образом, выглядеть курсивом - ну, косо). CoreText не имеет эквивалента для этого атрибута. По крайней мере, я не нашел ничего в CTStringAttributes.h (не то, что есть какая-либо документация даже спустя годы после выпуска CoreText).

Кто-нибудь знает, как я могу получить косой текст с CoreText на iOS?

Ответы [ 3 ]

8 голосов
/ 28 февраля 2012

Я бы попробовал использовать аргумент аффинного преобразования для CTFontCreateWithName() с матрицей сдвига.Например,

CGAffineTransform matrix = { 1, 0, 0.5, 1, 0, 0 };
CTFontRef myFont = CTFontCreateWithName(CFSTR("Helvetica"), 48, &matrix);

Это создаст весьма экстремальный перекос (если я правильно понял), но вы поняли идею.

Обновление:

Фактически, документация подразумевает, что это правильный способ сделать что-то .

1 голос
/ 28 февраля 2012

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

Единственное решение, которое мне приходит в голову сейчас, - это создание собственного шрифта с матрицей стриженных шрифтов:

CGAffineTransform matrix = CGAffineTransformMake(1, tan(degreesToRadians(0)), tan(degreesToRadians(20)), 1, 0, 0);  
CTFontRef myfont = CTFontCreateWithName(CFSTR("Helvetica"), 48, &matrix);

Вам придется поиграть с матрицей и посмотреть, что принесет наилучшие результаты. (Пожалуйста, не думайте, что это фальшивый код из моей головы и интернета.)

1 голос
/ 28 февраля 2012

Не пробовал, но в соответствии с Программирование на iOS, выдвигающее пределы , передача от kCTFontItalicTrait до CTFontCreateCopyWithSymbolicTraits выберет истинный курсив, если он доступен, и наклонный в противном случае.Также есть kCTFontSlantTrait для ручного десятичного уклона до 30 градусов.

...