6

xmpp-client アプリを開発しています。機能の 1 つは笑顔を送信することであり、ユーザーは通常のテキストと同じように編集できる必要があります。Viber アプリで編集する絵文字は、私が実装したいものの最良の例です。

私はすでに問題を解決するために3つの方法を試しました:

  • 通常の UIImageView のように絵文字を作成し、現在のキャレット rect を使用して UITextView のサブビューとして配置します。テキスト ビューでテキスト プレースホルダーとして 5 つの空白を使用します。2 つの問題があります。途中にテキストを挿入するときに絵文字を新しい行に配置すると (空白を印刷してもキャレットが新しい行に移動しません)。ユーザーが拡大鏡を使用してキャレットを配置すると、このプロセス中にデリゲート メソッドが呼び出されないため、絵文字を介して (5 つの空白を介して) キャレットを移動できます。
  • 私はEGOTextViewを試しました。新しい行を追加する必要がある場合、キャレットの位置とサイズ変更に問題があります。また、1 ライン サイズを使用すると、いくつかのレンダリング アーティファクトが発生します。
  • また、UIWebView を使用してみました。しかし、テキスト サイズに基づくサイズ変更や、ファーストレスポンダーになったときの応答速度に関するその他のアーティファクトには大きな問題がありました。

実際に機能する解決策についてアドバイスをくれる人がいるかもしれません。

4

1 に答える 1

2

私は UITextView/UITextInput の四角形と範囲のメカニズムにはあまり興味がありませんが、期待される結果を達成できる可能性がある (テストされていない) アドバイスを提供しようとしています。

組み込みの iOS 絵文字は単純な文字であるため、カスタム フォントを作成する (または既存のフォントを拡張する) ことで、同じ道をたどることができます。2 つのオプションがあります。

  • iOS 6.0 (UIKit クラスでのネイティブ サポートがある)をターゲットにしたい場合はNSAttributedString、必要なすべての顔文字を含むカスタム フォントを作成して、それをNSAttributedString(属性付き文字列にさまざまなフォント、フォント サイズ、スタイルを混在させることができます) 内で使用することができます。等々)。

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

それ以外の場合は、 CoreTextを使用して独自のカスタム textView を実装することで、より低レベルに進むことができますが、それは大変な作業になると思います。

于 2013-04-05T20:48:53.023 に答える