2012-03-19 6 views
9

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

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

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

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

ответ

13

Немного старая, но для кого он мог бы все еще относятся:

Это происходит потому, что новая система Neue Helvetica шрифт, используемый в новых сетчатке устройств (iPhone 4, IPad) не имеет курсивный вариант. Не каждый шрифт имеет жирный и/или курсивный вариант.
Итак, если вам нужен курсив, вам нужно использовать другой шрифт, например, старый Helvetica.

CTFontRef ref = CTFontCreateWithName((CFStringRef)@"Helvetica", 12, NULL); 
CTFontRef italicFont = CTFontCreateCopyWithSymbolicTraits(ref, 12, NULL, kCTFontItalicTrait, kCTFontItalicTrait); 
+0

И ваша альтернатива ... – ssteinberg

+0

Ha. Добро пожаловать в основной текст. –

+0

Upvote для бесполезного downvote. –

1

Преобразование UIFont/NSFont в CTFontRef очень просто, если вы используете ARC.

UIFont:

UIFont *uiFont = [UIFont fontWithName:@"Helvetica" size:10]; 
CTFontRef ctFont = (__bridge CTFontRef)uiFont; 

NSFont:

NSFont *nsFont = [NSFont fontWithName:@"Helvetica" size:10]; 
CTFontRef ctFont = (__bridge CTFontRef)nsFont; 
Смежные вопросы