2013-04-05 13 views
7

私はxmpp-client appを開発中です。 1つの機能は笑顔を送信することであり、ユーザーはそのようなテキストを編集する能力が必要です。 Viber Appで編集している絵文字は、私が実装したいものの最良の例です。絵文字編集のUITextView

  • 私はいつものUIImageViewのような顔文字を作成し、現在のキャレットの矩形を使用してUITextViewのサブビューとしてそれを置く:

    は、私はすでにこの問題を解決するには3つの方法を試してみました。テキストビューでは、テキストプレースホルダとして5つの空白を使用します。 2つの問題があります:中にテキストを挿入するときに、改行に絵文字を置くこと(空白を表示することで、改行を改行しない)。ユーザが拡大鏡を使用してキャレットを配置すると、このプロセス中にデリゲートメソッドが呼び出されないので、エモーティコンを介してキャレットを移動できます(5つの空白を使用して)。
  • 私はEGOTextViewを試しました。新しい行を追加する必要がある場合、キャレットの位置とサイズ変更に問題があります。また、1行のサイズを使用するとレンダリングのアーティファクトがあります。
  • また、私はUIWebViewを使ってみました。しかし、最初のレスポンダになると、応答の速さでテキストサイズやその他のアーティファクトに基づいてサイズを変更することに大きな問題がありました。

本当に実用的な解決法のアドバイスをいただけますか?

答えて

2

私は実際には、UITextView/UITextInputのrectsとrangesメカニズムには慣れていませんが、期待される結果を得ることができる(テストされていない)アドバイスを提供しようとしています。

内蔵のiOS絵文字は単純な文字なので、カスタムフォントを作成する(または既存のフォントを拡張する)ことで、同じパスに従うことができます。 我々は2つのオプションがあります。あなたがターゲットにしたい場合は

  • のiOS 6.0(つまり、UIKitのクラスでNSAttributedStringのネイティブサポートを持っている)、あなたは、あなたが必要とするすべての顔文字を含むカスタムフォントを構築しようとする可能性があり、 NSAttributedStringの中で使用してください(属性付きの文字列は、異なるフォント、フォントサイズ、スタイルなどを混在させることができます)。

  • あなたはiOSの5 と似た何かができる、しかし、あなたは(あなたがテキスト全体のために一つだけのフォントに制限されています)UITextView内部NSAttributedStringを使用することはできませんので、あなたが実際に一緒に組み合わせたフォントを使用する必要があります
  • 文字とカスタムの顔文字を使用することができます。したがって、すべての顔文字を追加することで、入力に使用するフォントを拡張する必要があります。とにかくこれにライセンスの影響があるかどうかは分かりません。

そうでない場合、あなたは常にCoreTextを使用して、独自のカスタムのTextViewを実装し、はるかに低レベルに行くことができますが、私はそれは大変な作業になると思います。

+0

ありがとうございました。フォントのカスタマイズについても考え始めますが、フルカラーのビットマップグリフをリンゴの絵文字のようにフォントで作成する方法は実際知られていません。 – yariksmirnov

+0

iOSのフォントにカラフルな画像を組み込む方法はありますか? – Stavash

+0

カスタムpngイメージを使ってsbixテーブルでカスタムフォントを作成することができました。それはOS Xで完全に動作しますが、iOSはApple Emojiのシステムバージョン以外のフォントからsbixテーブルへのマッピングのみを持つグリフをレンダリングすることを拒否しました。つまり、UITextViewのカスタムフォントをプログラムでUILabelに設定し、いくつかのemoji UTFシンボルコード、標準絵文字フォントからのグリフは、そのカスタムフォントグリフがそのUTFコードを提示していてもレンダリングされます。 – yariksmirnov