Ответ 1
Я посвятил много времени, пытаясь сделать то же самое. Лучше всего заменить значения unicode для emoji в вашем NSString, например. \uE100 и т.д. с помощью строки-заполнителя. Вы можете заменить кодировки emoji тегом HTML и использовать либо UIWenViews, либо DTCoreText, чтобы нарисовать изображение в строке. Я сделал это, он тоже работает, но он будет немного медленным (особенно если вы хотите отобразить эту метку в виде таблицы.)
Вот немного стартера:
Сделайте словарь с UIImages как объекты и строки-заполнители в качестве ключей:
self.emoticonDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"happyEmoticon.png", @":)",
@"sadEmoticon.png", @":(",
@"testImg.png", @"\uE100",
nil];
__block NSString *text1 = [NSString stringWithFormat:@"<html><p>%@</p></html>",text];
[self.emoticonDict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) {
text1 = [text1 stringByReplacingOccurrencesOfString:key withString:[NSString stringWithFormat:@"<img height= 15 width= 15 src=\"%@\">",obj]];
}];
В этот момент вы можете загрузить этот HTML-код в UIWebView, и у вас будет то, что вы хотите.
[myWebView loadData:_htmlData MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];//do create the webview first
Если медленная скорость UIWebView вызывает беспокойство, вы можете читать вперед. В любом случае посмотрите на примечание в конце этого ответа.
Чтобы создать DTAttributedLabel, мы делаем следующее: Сначала мы создаем NSattributedString с помощью DTHTMLAttributedStringBuilder:
NSAttributedString *temp = [[[DTHTMLAttributedStringBuilder alloc] initWithHTML:text1
options:@{
DTDefaultFontFamily: @"Helvetica",
DTDefaultFontSize:@15,};
documentAttributes:nil]
generatedAttributedString];
Затем вы можете использовать экземпляр DTAttributedLabel для отображения темпа.
self.tempLabel.attributedString = temp;//create a DTAttributedLabel Instance called tempLabel before this, I had it as a property
Моя цель состояла в том, чтобы сгенерировать текстовую метку очень быстро (Table Views), поддерживая пользовательские смайлики. DTAttributedLabels быстрые (намного быстрее, чем UIWebView) ЗАМЕТКА: Я также создал собственный шрифт, где я сопоставил значения unicode для emojis с пользовательским глифом. К моему удивлению, все же были отображены стандартные эмоции. Я хотел бы здесь заявить, что всякий раз, когда iOS (CoreText) встречается с символом, значение которого находится в разделе Emoji, оно рисует его с использованием шрифта AppleColorEmoji по умолчанию. Отсутствие документации о том, как шрифт Apple Color Emoji на самом деле рисуется на iOS, на самом деле затрудняет мне это доказать, но это кажется правдоподобным объяснением. Если вы выбросите emoji из приложения палитры символов в файл в textEdit, затем выберите его и попробуйте изменить шрифт, вы увидите, что этого не происходит. Аналогично, если вы наберете текст, затем выберите его и попробуйте изменить его шрифт на Apple Color Emoji, вы увидите, что этого не произойдет. Когда я декомпилировал шрифт Apple Color Emoji, я не нашел символьные сопоставления или глифы для текстовых символов (кроме 0-9). Так или иначе, даже если вы установили шрифт ярлыка как Apple Color Emoji, шрифт текстовой (неэможи) части вашего текста ярлыка будет установлен на что-то еще.
Не стесняйтесь комментировать и делиться своими знаниями, поскольку этот регион вокруг шрифта Apple Color Emoji по-прежнему остается очень неясным.