有没有办法知道iOS是否支持Emoji? [英] Is there a way to know if an Emoji is supported in iOS?

查看:0
本文介绍了有没有办法知道iOS是否支持Emoji?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一款iOS应用程序,表情符号在其中发挥了重要作用。

In iOS 10.2, new emojis were released.

我敢肯定,如果有人使用iOS 8,他们实际上不会看到这些表情符号。有什么方法可以检测到这一点吗?我正试图动态地建立用户iOS版本支持的所有表情符号的列表,但我遇到了一些麻烦。

推荐答案

澄清:Emoji只是unicode字符空间中的一个字符,因此本解决方案适用于所有字符,而不仅仅是Emoji。

摘要

若要了解给定设备或操作系统上是否有Unicode字符(包括Emoji),请运行下面的unicodeAvailable()方法。

它的工作原理是将给定字符图像与已知的未定义Unicode字符U+1FFF进行比较。

unicodeAvailable(),Character扩展

private static let refUnicodeSize: CGFloat = 8
private static let refUnicodePng =
    Character("u{1fff}").png(ofSize: Character.refUnicodeSize)

func unicodeAvailable() -> Bool {
    if let refUnicodePng = Character.refUnicodePng,
        let myPng = self.png(ofSize: Character.refUnicodeSize) {
        return refUnicodePng != myPng
    }
    return false
}

讨论

  1. 所有字符都将呈现为PNG,大小与

    中定义的相同(8)

    static let refUnicodeSize: CGFloat = 8

  2. 未定义字符U+1FFF图像在

    中计算一次

    static let refUnicodePng = Character("u{1fff}").png(ofSize: Character.refUnicodeSize)

  3. 帮助器方法可以选择从Character

    创建PNG

    func png(ofSize fontSize: CGFloat) -> Data?

1.示例:测试3个表情符号

let codes:[Character] = ["u{2764}","u{1f600}","u{1F544}"] // ❤️, 😀, undefined
for unicode in codes {
    print("(unicode) : (unicode.unicodeAvailable())")
}

2.示例:测试Unicode字符范围

func unicodeRange(from: Int, to: Int) {
    for unicodeNumeric in from...to {
        if let scalar = UnicodeScalar(unicodeNumeric) {
            let unicode = Character(scalar)
            let avail = unicode.unicodeAvailable()
            let hex = String(format: "0x%x", unicodeNumeric)
            print("(unicode) (hex) is (avail ? "" : "not ")available")
        }
    }
}


帮助器函数:CharacterPNG

func png(ofSize fontSize: CGFloat) -> Data? {
    let attributes = [NSAttributedStringKey.font:
                          UIFont.systemFont(ofSize: fontSize)]
    let charStr = "(self)" as NSString
    let size = charStr.size(withAttributes: attributes)

    UIGraphicsBeginImageContext(size)
    charStr.draw(at: CGPoint(x: 0,y :0), withAttributes: attributes)

    var png:Data? = nil
    if let charImage = UIGraphicsGetImageFromCurrentImageContext() {
        png = UIImagePNGRepresentation(charImage)
    }

    UIGraphicsEndImageContext()
    return png
}

►在GitHub上找到此解决方案,并在Swift Recipes上找到详细文章。

这篇关于有没有办法知道iOS是否支持Emoji?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆