Core Text を使用して iPhone 用のテキスト ビューアを作成しているとします。ユーザーが基本フォント サイズを変更するたびに、特定のフォント サイズで NSAttributedString 全体を表示するために必要なページ数 (固定サイズの CGRects) をカウントする必要があります。
そして、ユーザーが不必要なUIの遅れを経験しないように、これを別のNSOperationで行いたいと思います。
残念ながら、ページをカウントするには、非表示テキスト描画モードを使用してフレーム (CTFrameDraw) を描画し、CTFrameGetVisibleStringRange を使用して文字をカウントする必要があります。しかし、テキストを描画するには CGContext が必要です。そして、ここから問題が始まります...
UIGraphicsGetCurrentContext を呼び出すことで、drawRect で CGContext を取得できますが、この場合は次のようになります。
- performSelectorOnMainThread を使用して CGContext で動作するメソッドを呼び出す必要がありますよね?
- 他のスレッドは、このコンテキストを CFRetain する必要があります。drawRect メソッドの外で drawRect の CGContext を使用することは許容されますか?
他の解決策はありますか?ワーカー スレッドで別の CGContext を作成しますか? どのように?CGBitmapContext? ページが正しくカウントされるように、すべての条件 (わからない、解像度など) が drawRect の CGContext と同じであることを確認するにはどうすればよいですか?