私は同じことをしようとして多くの時間を費やしてきました。最善の策は、NSStringの絵文字のUnicode値を置き換えることです。\uE100などとプレースホルダー文字列。絵文字エンコーディングを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を作成するには、次のようにします。まず、DTHTMLAttributedStringBuilderを使用してNSattributedStringを作成します。
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
私の目的は、カスタム絵文字をサポートしながら、テキストラベルを非常に高速に(テーブルビューで)生成することでした。DTAttributedLabelsは高速です(UIWebViewよりもはるかに高速です)注:絵文字のUnicode値をカスタムグリフにマップしたカスタムフォントも作成しました。驚いたことに、それでもデフォルトの絵文字が表示されていました。ここで、iOS(CoreText)が絵文字セクションに値がある文字に出くわすと、デフォルトでAppleColorEmojiフォントを使用して描画することを主張したいと思います。Apple Color Emojiフォントが実際にiOSでどのように描画されるかについてのドキュメントがないため、これを証明するのは実際には困難ですが、これはもっともらしい説明のようです。キャラクターパレットアプリからテキストエディットのファイルに絵文字をドロップし、それを選択してフォントを変更しようとすると、それが行われないことがわかります。同様に、テキストを入力して選択し、フォントをApple Color Emojiに変更しようとすると、テキストが表示されないことがわかります。Apple Color Emojiフォントを逆コンパイルしたとき、テキスト文字の文字マッピングまたはグリフが見つかりませんでした(0〜9を除く)。どういうわけか、ラベルのフォントをApple Color Emojiとして設定しても、ラベルのテキストのテキスト(非絵文字)部分のフォントは別のものに設定されます。
Apple Color Emojiフォント周辺のこの領域はまだ非常に不明確なままなので、コメントして知識を共有してください。