How can I determine if a specific emoji character

2020-07-25 00:56发布

With the release of iOS 9.1, we got a lot of cool new emoji like taco (

2条回答
\"骚年 ilove
2楼-- · 2020-07-25 01:37

In response to the Swift question above, here's a Swift version based largely on an answer in this question: Get surrogate pairs from an emoji

func isEmojiSupported(emoji: String) -> Bool {
  let uniChars = Array(emoji.utf16)
  let font = CTFontCreateWithName("AppleColorEmoji", 0.0, nil)
  var glyphs: [CGGlyph] = [0, 0]
  return CTFontGetGlyphsForCharacters(font, uniChars, &glyphs, uniChars.count)
}
查看更多
Juvenile、少年°
3楼-- · 2020-07-25 01:57
// Determine if the emoji character provided in the string can be rendered on this OS version
+ (BOOL)isEmojiSupported:(NSString *)emoji
{
    NSData *data = [string dataUsingEncoding:NSUTF32LittleEndianStringEncoding];
    UTF32Char emojiValue;
    [data getBytes:&emojiValue length:sizeof(emojiValue)];

    // Convert UTF32Char to UniChar surrogate pair.
    // Found here: http://stackoverflow.com/questions/13005091/how-to-tell-if-a-particular-font-has-a-specific-glyph-64k#
    UniChar characters[2] = { };
    CFIndex length = (CFStringGetSurrogatePairForLongCharacter(emojiValue, characters) ? 2 : 1);

    CGGlyph glyphs[2] = { };
    CTFontRef ctFont = CTFontCreateWithName((CFStringRef)@"AppleColorEmoji", 0.0, NULL);

    // If we don't get back any glyphs for the characters array, it's not supported
    BOOL ret = CTFontGetGlyphsForCharacters(ctFont, characters, glyphs, length);
    CFRelease(ctFont);
    return ret;

}

查看更多
登录 后发表回答