我有一个自定义的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
调用时,它会产生一个 nil 返回值。我发现在这些新设备上,[font name]
返回".HelveticaNeueUI"。虽然 CTFontCreateWithName
与此私有字体名称似乎可以正常工作,但 CTFontCreateCopyWithSymbolicTraits
不行。然而,如果我使用 [UIFont italicSystemFontOfSize:[font pointSize]]
创建一个斜体字体,则会创建一个斜体字体,其中 [font name]
仍返回“.HelveticaNeueUI”。
我应该如何将我的 UIFont
转换为 CTFontRef
,以便我仍然可以在视网膜和非视网膜显示器上对我的 CTFontRef
应用新的特性?