有没有办法知道在iOS中是否支持表情符号?
我正在构build一个iOS应用程序,Emojis在其中扮演重要angular色。
在iOS 10.2中,发布了新的emojis。
我很确定,如果有人拥有iOS 8,他们实际上不会看到这些表情符号。 有没有办法来检测这个? 我试图dynamic构build用户iOS版本支持的所有Emojis的列表,但是我遇到了一些麻烦。
-
要知道给定设备或操作系统上是否有一些表情符号或Unicode字符可用,可以运行下面的
emojiAvailable()
方法。它通过将给定的字符图像与已知的无效字符
1f3f6
进行比较来工作。 -
要制作大量表情符号或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))") }
第二个例子: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文章。