Преобразование UIFont в CTFontRef и добавление курсива на дисплее Retina

У меня есть пользовательский подкласс UILabel, который создает пользовательский рисунок с использованием CoreText. Раньше я рисовал свои строки, используя UIFont, который установлен на метке, обращаясь к ней с помощью свойства шрифта. Я также добавляю шрифту некоторые черты. Вот как это выглядит:

UIFont* font = [self font];
CTFontRef ref = CTFontCreateWithName((CFStringRef)[font name], [font pointSize], NULL);
CTFontRef italicFont = CTFontCreateCopyWithSymbolicTraits(ref, [font pointSize], NULL, kCTFontItalicTrait, kCTFontItalicTrait);

Раньше это работало нормально, пока не появился новый ipad с ретина-дисплеем. Когда я выполняю вызов CTFontCreateCopyWithSymbolicTraits, он возвращает нулевое значение. Я обнаружил, что [имя шрифта]возвращает «.HelveticaNeueUI» на этих новых устройствах.CTFontCreateWithName, похоже, нормально работает с этим частным именем шрифта, но CTFontCreateCopyWithSymbolicTraits— нет. Тем не менее, если я создаю курсивный шрифт, используя [UIFont italicSystemFontOfSize: [font pointSize]] , он создает курсивный шрифт, для которого [имя шрифта] по-прежнему возвращает «.HelveticaNeueUI».

Как мне преобразовать мой UIFontв CTFontRef, чтобы я мог по-прежнему применять новые черты к моему CTFontRefкак на дисплеях с сетчаткой, так и без нее?

9
задан unexpectedvalue 16 May 2012 в 14:31
поделиться