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

我正在构build一个iOS应用程序,Emojis在其中扮演重要angular色。

在iOS 10.2中,发布了新的emojis。

我很确定,如果有人拥有iOS 8,他们实际上不会看到这些表情符号。 有没有办法来检测这个? 我试图dynamic构build用户iOS版本支持的所有Emojis的列表,但是我遇到了一些麻烦。

  1. 要知道给定设备或操作系统上是否有一些表情符号或Unicode字符可用,可以运行下面的emojiAvailable()方法。

    它通过将给定的字符图像与已知的无效字符1f3f6进行比较来工作。

  2. 要制作大量表情符号或unicode字符,请在batchTest()演示,在循环中调用characterData() batchTest() 。 通过caching一次无效字符1f3f6稍微有效1f3f6

第一个例子:testing3个表情符号

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

3个字符

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

 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文章。