2011-11-25 2 views
14

私の絵に私の独自のグラフィックスで絵文字アイコンをオーバーライドしたい(私のアプリ内のみ)。Emojiグラフィックスを無効にする

私が今までに読んだことから、可能な解決策の1つは、希望のユニコード文字をオーバーライドするカスタムフォント拡張を作成することです。私はCATextLayerとのインターオペラビリティを維持したいと考えています。

編集:カスタムフォントのように見えるのは私の解決策ではありません。フォントはグレースケールで定義する必要があります。次の可能性:カスタムCALayerの作成、絵文字コードに基づくセグメントへの文字列のチャンク、タイプ設定+グラフィックスの手動描画(コアグラフィックスとコアテキスト)

編集:円滑なスクロールパフォーマンスを維持するためにも探していますテーブルが表示されます。

+0

これはあなたに役立つことがあります - http://stackoverflow.com/questions/1225514/making-an-emoji-enabeling-app – Sagar

答えて

2

私は同じことをしようと多くの時間を費やしてきました。あなたの最善の策は、例えばNSStringの絵文字のユニコード値を置き換えることです。 \ u100などにプレースホルダ文字列を入力します。絵文字のエンコードを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]]; 
    }]; 

あなたはこの点荷重でこののUIWebViewにHTMLとは、あなたが欲しいものを持っているだろうことができます。

[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よりもはるかに高速です) 注:私はemojisのユニコード値をカスタムグリフにマップしたカスタムフォントを作成しました。驚いたことに、デフォルトの絵文字が表示されました。ここでは、iOS(CoreText)が値がEmojiセクションにある文字を見つけるたびに、デフォルトでAppleColorEmojiフォントを使用して描画していると主張したいと思います。Apple Color Emojiフォントが実際にiOS上に描かれているかどうかのドキュメントがないため、実際にはこれを証明することが難しくなりますが、これはもっともらしい説明です。 文字パレットアプリからの絵文字をtextEditのファイルにドロップしてからそれを選択し、フォントを変更しようとすると、それが起こらないことがわかります。 同様に、テキストを入力してそれを選択し、そのフォントをApple Color Emojiに変更しようとすると、それは起こらないことがわかります。 Apple Color Emojiフォントを逆コンパイルすると、文字の文字(0〜9を除く)の文字マッピングやグリフが見つかりませんでした。どういうわけか、ラベルのフォントをApple Color Emojiとして設定しても、ラベルのテキストのテキスト(非絵文字)部分のフォントは別のものに設定されます。

Apple Color Emojiフォントの周りのこの領域は依然として非常に不明確なので、お気軽にコメントして共有してください。

+0

私はこの問題に触れ、何ヶ月もiOSに取り組んでいないので、長い時間が経ちました。しかし、あなたは私のupvoteを持っている! – lorean

0

1つの解決策は、UITextFieldまたはTextView代理人を使用してユーザーの入力を聞くことです。絵文字を入力すると、UIImageViewがテキストとインラインでポップアップし、入力で絵文字アイコンが削除されます。

+0

提案ありがとうございます。残念なことに、私の場合は、UIKitオブジェクトを使用しないようにする必要があります。なぜなら、UIKitオブジェクトが不安定なスクロールパフォーマンスに苦しんでいるからです。 – lorean

+0

@loreanいくつかのUIViewを含めるだけで、パフォーマンスの問題がスクロールしている場合は、バッキングCALayerを調整するなど、不注意なことをしている可能性があります。あなたは精緻化できますか? –

+0

こんにちはコンラッド。私はtableCellのUIViewsを使って広範なテストを行ってきました。テーブルセルをスムーズにスクロールすることは決してできませんでした。常にフレームがスキップされ、時には全体のフレームレートが低くなります。私がしているのは、ビュー階層を1つのdrawRectに崩壊させることです。あるいは、最近では、CALayersのコンポジションを作成しています。優れたスクロールパフォーマンスを備えたUIViewsで完全に構築された複雑なtableViewCellのサンプルコードがある場合は、実際に見たいと思います! – lorean

0

アップルの私的なdevforum(あなたがiOSデベロッパープログラムの登録メンバーであればアクセス権があります)にこの問題に関するいくつかの言及があります。

表示しようとしているもののフォントを明示的に設定する可能性があるようです。

+0

私はフォーラムにアクセスできますが、何も見つかりません。絵文字を検索しても、検索結果はゼロになります。 – lorean

+0

いくつかのリンクが役に立つかもしれない、@マイケル? – Emil

+0

こんにちは@Emil ... [こちらは1](https://devforums.apple.com/message/531811#531811)(そのスレッドの最初のカップルの回答は、フォントの設定について話します); 'KeyboardEmojiEverywhere' plistフラグが単一のアプリケーションのplist内で動作するのだろうか?そうでない場合は、bugreporter.apple.comで機能リクエストを提出することをお勧めします。 –

関連する問題