【问题标题】:Convert UIFont to CTFontRef and add italic on Retina display将 UIFont 转换为 CTFontRef 并在 Retina 显示屏上添加斜体
【发布时间】:2012-04-04 04:34:58
【问题描述】:

我有一个 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

【问题讨论】:

    标签: ios core-text retina-display


    【解决方案1】:

    有点老了,但对谁来说可能仍然很重要:

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

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

    【讨论】:

    • 哈。欢迎来到核心文本。
    【解决方案2】:

    如果使用 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;
    

    【讨论】:

      【解决方案3】:

      这样用,把uifont转成CTFontRef

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

      我们需要释放ctFont吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-06
        • 1970-01-01
        相关资源
        最近更新 更多