iPad でカスタム ドキュメント形式の強調表示/注釈機能を備えたドキュメント ビューアーを実装しています。ドキュメントはやや長く (紙に印刷すると 100 ~ 200 ページ)、適切なアプローチを見つけるのに苦労しました。要件は次のとおりです。
1) 基本的なリッチ テキスト スタイル: 左/右マージンの制御。フォント名、サイズ、前景色/背景色、および行間を制御します。太字、斜体、下線など
2) 任意のテキスト領域の選択と強調表示 (Safari/UIWebView のような段落境界に限定されません)。
3) 切り取り/コピー/貼り付けポップアップ (UIMenuController) のカスタマイズ これは、アプリの必須要件の 1 つです。
私の最初の実装は UIWebView に基づいていました。テキスト スタイル設定用の CSS を使用して、ドキュメントを HTML としてレンダリングしました。しかし、(段落の境界を越えて) 必要な種類のテキスト選択動作を得ることができず、UIMenuController を UIWebView 内からカスタマイズすることはできません。
そこで私は、JavaScript のアプローチに取り組み始めました。JQuery を使用してデバイスのテキスト選択動作を偽造し、タッチ イベントをトラップし、DOM を動的に変更してテキストの選択領域の背景色を変更しました。偽の UIMenuController コントロールを非表示の DIV として作成し、アクティブな選択領域があるたびに配置して再表示しました。
汚すぎる格好はやめて。
主な問題は、それが SLOOOOOOOW だということです。ドキュメントをスクロールするのは素晴らしく速いですが、動的に DOM を変更するのはあまり機敏ではありません。さらに、拡大鏡ルーペを再作成する方法がわからなかったため、偽のテキスト選択 GUI はネイティブ実装とまったく同じには見えません。また、JavaScript レイヤーと Objective-C レイヤー (アプリの残りの部分が存在する) の間の通信ブリッジをまだ実装していませんが、これは非常に面倒なことになりつつありました。
だから私はCoreTextを見てきましたが、Web上には貴重な例がほとんどありません. この単純な小さなデモに少し時間を費やしました。
http://github.com/jonasschnelli/I7CoreTextExample/
CoreText を使用して NSAttributedText 文字列を UIView に描画する方法を示します。しかし、独自の問題があります。テキスト選択動作を実装しておらず、UIMenuController を提示していないため、それを実現する方法がわかりません。さらに重要なことに、ドキュメント全体を一度に描画しようとするため、長いドキュメントではパフォーマンスが大幅に低下します。ドキュメントには何千もの段落が含まれる場合があり、一度に画面に表示されるのはドキュメントの 1% 未満です。
プラス面として、これらのドキュメントにはすでに正確な書式設定情報が含まれています。テキストのすべての行の正確なページ位置を知っているので、レイアウト エンジンは必要ありません。
CoreText を使用してこの種のビューを実装する方法を知っている人はいますか? このような質問に対して本格的な実装はやり過ぎであることは理解していますが、いくつかの基本的な要件を備えた優れた CoreText の例を探しています。
1) 正確なレイアウトと書式制御 (計算済みの書式メトリックとテキスト スタイルを使用)。
2) テキストの任意選択。
3) UIMenuController のカスタマイズ。
4) オフスクリーン オブジェクトのリソースの効率的なリサイクル。
テキスト要素が画面外にスクロールしたときに独自のリサイクルを実装できれば幸いですが、UIScrollView を再実装する必要はありませんか?
私は iPhone 開発の初心者で、まだ Objective-C に慣れていますが、他の言語 (Java、C#、flex/actionscript など) で 10 年以上働いているので、自信を持っています。 iPhone SDK と、このようなものの一般的なコーディング パターンについてより良い感触があれば、仕事を成し遂げる私の能力。それは私だけですか、それともSDKのドキュメントは本当にひどいですか?
とにかく、助けてくれてありがとう!