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

标签 ios emoji

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

In iOS 10.2, new emojis were released.

我很确定,例如,如果有人使用 iOS 8,他们实际上将无法看到这些表情符号。有没有办法检测到这一点?我正在尝试动态构建用户 iOS 版本支持的所有表情符号的列表,但我遇到了一些麻烦。

最佳答案

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

概要

要了解 Unicode 字符(包括表情符号)在给定设备或操作系统上是否可用,请运行下面的 unicodeAvailable() 方法。

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

unicodeAvailable(),一个字符扩展

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())")
}

3 characters

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")
        }
    }
}

a few hundred characters


辅助函数: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 - 有没有办法知道 iOS 是否支持表情符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41318999/

相关文章:

ios - SChartScatterSeries 忽略所选样式

iphone - 移动行后更新 UITableViewCell 标签属性

mysql - Openshift MySql 表情符号支持

google-sheets - 如何计算列中包含表情符号的所有单元格?

ios - 返回错误的结果用于在 swift 中打印 FIRST 和 LAST DATE OF THE MONTH

iphone - 在iphone应用程序开发中如何添加两个uiimageview并将其保存到iphone照片库?

ios - 如何使用与 NewtonSoft (JSON.Net) 组件中的 JSON 匹配的 Swift 类从 JSON 读取/写入对象数组?

Python 3 Selenium |剪贴板不适用于 Windows 上的 headless chromedriver

ios - NSString 表情符号文字

objective-c - OSX 表情符号面板位置