2012-10-22 91 views
1

當代碼點適合64位值時,確定特定Unicode字體是否包含代碼點的字形相對比較容易。如何判斷特定字體是否具有特定字形> 64k

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

但CTFontGetGlyphsForCharacters需要一個UniChar數組,它是一個16位類型。有沒有一種方法可以確定一個字形是否可用於超出此範圍的角色?例如,U + 1F4A9?

回答

0

這是我結束了使用(其中代碼點是要測試的32位代碼點):

UniChar characters[2]; 
    CFIndex length = (CFStringGetSurrogatePairForLongCharacter(codePoint, characters) ? 2 : 1); 

    CGGlyph glyphs[2]; 
    if (CTFontGetGlyphsForCharacters(ctFont, characters, glyphs, length)) { 
     // It Exists 
    } 
+0

這不是爲我工作。我已經用上面提到的相同的代碼點(U + 1F4A9)進行了測試。我嘗試了兩種不同的創建UniChar字符數組的方法,在這兩種情況下,我都得到相同的值:{55357,56489}。 'CTFontGetGlyphsForCharacters'返回false,但我相信它應該是正確的系統字體大小30.任何想法,我可能做錯了什麼?謝謝。 –

+1

我錯誤地認爲系統字體上有表情符號的字形。我通過使用下面的ctFont來修復它。 'CTFontRef ctFont = CTFontCreateWithName((CFStringRef)@「AppleColorEmoji」,0.0,NULL);' –

相關問題