微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法知道iOS中是否支持表情符号?

我正在构建一个iOS应用程序,而Emojis在其中扮演很重要的角色.

In iOS 10.2,new emojis were released.

我很确定,如果有人有iOS 8,例如,他们实际上不会看到这些emojis.有没有办法检测这个?我正在努力动态地构建用户iOS版本支持的所有Emojis的列表,但是我有一些麻烦.

解决方法

>要知道给定设备或操作系统上是否有几个表情符号或Unicode字符可用,您可以在下面运行emojiAvailable()方法.

它通过将给定的字符图像与已知的无效字符1f3f6进行比较来工作.
>为了制作一些表单或unicode字符,可以在循环中调用characterData(),如batchtest()所示.通过缓存无效字符1f3f6一次,效率略高一些.

一个例子:测试3个表情符号

let codes:[Character] = ["\u{2764}","\u{1f600}","\u{1F544}"] // change that
for code in codes {
    print("\(code) : \(emojiAvailable(code))")
}

第二个例子:测试几百个表情符号

func batchtest() {
    let refCode = Character("\u{1f3f6}") // do not change this

    if let refData = characterData(refCode) {
        for Emojicode in 0x1f300...0x1f600 { // change that
            let emojiCharacter = Character(UnicodeScalar(Emojicode)!)
            if let testData = characterData(emojiCharacter) {
                let valid = !(refData as NSData).isEqual(to: testData)
                print("Emoji \(emojiCharacter) for code \(Emojicode) is valid: \(valid)")
            }
        }
    }
}

emojiAvailable()

func emojiAvailable(_ Emojicode:Character) -> Bool
{
    let refCode = Character("\u{1f3f6}") // do not change this

    if let refData = characterData(refCode),let testData = characterData(Emojicode) {
        return !(refData as NSData).isEqual(to: testData)
    }
    return false
}

字符到PNG

func characterData(_ char:Character) -> Data?
{
    let attributes = [NSFontAttributeName: UIFont.systemFont(ofSize: 10)]
    let charStr = "\(char)" as Nsstring
    let size = charStr.size(attributes: attributes)

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

    var charData:Data? = nil
    if let charImage = UIGraphicsGetimageFromCurrentimageContext() {
        charData = UIImagePNGRepresentation(charImage)
    }

    UIGraphicsEndImageContext()
    return charData
}

►要下载完整的项目,请查阅swiftarchitect.com上的Emoji & Unicode文章.

原文地址:https://www.jb51.cc/iOS/337658.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐