我有一个自定义的子类的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应用新特征?
发布于 2012-05-16 22:28:46
有点老了,但对那些可能还在担心的人来说:
这是因为在新的视网膜设备(iPhone 4,iPad)中使用的新Neue Helvetica系统字体没有斜体版本。并不是每种字体都有粗体和/或斜体变体。
因此,如果您需要斜体文本,您需要使用不同的字体,例如,旧的Helvetica。
CTFontRef ref = CTFontCreateWithName((CFStringRef)@"Helvetica", 12, NULL);
CTFontRef italicFont = CTFontCreateCopyWithSymbolicTraits(ref, 12, NULL, kCTFontItalicTrait, kCTFontItalicTrait);发布于 2017-05-04 18:33:20
如果你使用ARC,将UIFont/NSFont转换为CTFontRef是非常简单的。
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;发布于 2020-06-12 15:25:11
用这种方式,把uifont转换成CTFontRef
UIFont *uiFont = [UIFont fontWithName:@"Helvetica" size:10];
CTFontRef ctFont = (__bridge CTFontRef)uiFont;我们需要释放ctFont吗?
https://stackoverflow.com/questions/9774449
复制相似问题