将UIFont转换为CTFontRef并在Retina显示屏上添加斜体

Dal*_*him 9 core-text ios retina-display

我有一个自定义子类,UILabel使用CoreText进行自定义绘图.我曾经使用在UIFont使用font属性访问它的标签上设置的字符串来绘制我的字符串.我还在字体中添加了一些特征.这是它的样子:

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

这曾经很好地工作,直到新的ipad出现其视网膜显示器.当我执行CTFontCreateCopyWithSymbolicTraits调用时,它会产生一个nil返回值.我发现[font name]在这些新设备上返回".HelveticaNeueUI".在CTFontCreateWithName似乎好工作与这家民营字体的名字,但CTFontCreateCopyWithSymbolicTraits没有.然而,如果我使用[UIFont italicSystemFontOfSize:[font pointSize]]它创建一个斜体字体,则会创建一个[font name]仍然返回".HelveticaNeueUI" 的斜体字体.

我应该如何将我转换UIFontCTFontRef能够CTFontRef在视网膜和非视网膜显示器上应用新的特征?

une*_*lue 13

有点旧,但对于它可能仍然关注的人:

这是因为在新的视网膜设备(iPhone 4,iPad)中使用的新Neue Helvetica系统字体没有斜体版本.并非每种字体都有粗体和/或斜体变体.
因此,如果您需要斜体文本,则需要使用不同的字体,例如旧的Helvetica.

CTFontRef ref = CTFontCreateWithName((CFStringRef)@"Helvetica", 12, NULL);
CTFontRef italicFont = CTFontCreateCopyWithSymbolicTraits(ref, 12, NULL, kCTFontItalicTrait, kCTFontItalicTrait);
Run Code Online (Sandbox Code Playgroud)