poner - ¿Hay alguna manera de saber si un Emoji es compatible con iOS?
emojis de ios 11 en android sin root (1)
Aclaración: un Emoji es simplemente un personaje en el espacio de caracteres Unicode, por lo que la solución actual funciona para todos los personajes, no solo para Emoji.
Sinopsis
Para saber si un carácter Unicode (incluido un Emoji) está disponible en un dispositivo o sistema operativo determinado, ejecute el método unicodeAvailable()
continuación.
Funciona comparando una imagen de carácter dada con un carácter Unicode indefinido conocido U+1FFF
.
unicodeAvailable (), una extensión de 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
}
Discusión
Todos los caracteres se representarán como un png del mismo tamaño (8) como se define una vez en
static let refUnicodeSize: CGFloat = 8
La imagen
U+1FFF
carácter indefinido se calcula una vez enstatic let refUnicodePng = Character("/u{1fff}").png(ofSize: Character.refUnicodeSize)
Un método auxiliar crea opcionalmente un png a partir de un
Character
func png(ofSize fontSize: CGFloat) -> Data?
1. Ejemplo: Prueba contra 3 emoji.
let codes:[Character] = ["/u{2764}","/u{1f600}","/u{1F544}"] // ❤️, 😀, undefined
for unicode in codes {
print("/(unicode) : /(unicode.unicodeAvailable())")
}
2. Ejemplo: Probar un rango de caracteres 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")
}
}
}
Función auxiliar: Character
a png
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
}
► Encuentre esta solución en GitHub y un artículo detallado sobre Recetas Swift .
Estoy creando una aplicación para iOS, y Emojis juega un papel importante en ella.
En iOS 10.2, se lanzaron nuevos emojis.
Estoy bastante seguro de que si alguien tiene iOS 8, por ejemplo, no podrían ver estos emojis. ¿Hay una manera de detectar esto? Estoy tratando de construir dinámicamente una lista de todos los Emojis que son compatibles con la versión de iOS del usuario, pero estoy teniendo un poco de problemas.