【问题标题】:How to tell if a particular font has a specific glyph >64k如何判断特定字体是否具有> 64k的特定字形
【发布时间】:2013-06-03 06:18:56
【问题描述】:

当代码点适合 64 位值时,确定特定 Unicode 字体是否包含代码点字形相对容易。

if (CTFontGetGlyphsForCharacters(ctFont, chars, glyphs, 1)) {
    // It exists
}

但是 CTFontGetGlyphsForCharacters 需要一个 UniChar 数组,它是 16 位类型。有没有一种方法可以确定字形是否可用于超出此范围的字符?比如U+1F4A9?

【问题讨论】:

    标签: iphone ios


    【解决方案1】:

    这是我最终使用的(其中 codePoint 是您要测试的 32 位代码点):

        UniChar characters[2];
        CFIndex length = (CFStringGetSurrogatePairForLongCharacter(codePoint, characters) ? 2 : 1);
    
        CGGlyph glyphs[2];
        if (CTFontGetGlyphsForCharacters(ctFont, characters, glyphs, length)) {
            // It Exists
        }
    

    【讨论】:

    • 这对我不起作用。我已经使用您上面提到的相同代码点(U+1F4A9)进行了测试。我尝试了两种不同的方法来创建 UniChar 字符数组,在这两种情况下我都得到了相同的值:{55357, 56489}。 CTFontGetGlyphsForCharacters 返回 false,但我确信系统字体大小 30 应该是 true。关于我可能做错了什么有什么想法吗?谢谢。
    • 我误以为系统字体有表情符号的字形。我改用以下 ctFont 来修复它。 CTFontRef ctFont = CTFontCreateWithName((CFStringRef)@"AppleColorEmoji", 0.0, NULL);
    猜你喜欢
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2016-01-04
    • 2012-03-06
    相关资源
    最近更新 更多