2010-12-18 17 views

答えて

9

これは絶対的な痛みですができます。

は、あなたはそれらの文字範囲は、あなたがCTLineGetStringRange()を使用して探している範囲内であれば、ライン自体のようにレンダリングされますどのように大きな見つけることCTLineGetTypographicBounds()を使用して、チェックCTFrameGetLines()を使用して、フレーム内のすべての行を取得する必要があり、および使用CTLineGetOffsetForStringIndex()を使用して、範囲の開始/終了文字の実際の位置を決定します(行が目的の範囲の部分範囲にすぎない場合)。

これをすべて組み合わせてオフセットと高さを足し合わせることで、必要なものを手に入れることができます。 CTLineGetImageBounds()はグラフィックスコンテキストなしでは機能しません(とにかく、私が収集したものからはかなり高価です)。この問題を解決する必要はありません。

+0

詳しい回答、ありがとうございます!このようなことに必要なすべての機能を見つけることは、常に苦痛です。 :) – Joshua

+1

@Joshuaは、この答えを実装するときにUコードを共有できますか?私はいくつかの問題を抱えていると思うし、3週間まで解決できないと思う。助けてください... –

+0

@Risma私は実際にこれを実装することは決してできませんでしたが、必要なものはすべてSeanの答えです。 – Joshua

2

最初に、あなたが興味を持っている範囲がある行を決定します。次に、CTLineGetOffsetForStringIndex()を呼び出して、行の先頭から特定の文字列位置のオフセットを取得します。 CTLineGetImageBounds()と一緒に、あなたの範囲の最初と最後の文字の位置を計算することが可能でなければなりません。CGPoint

関連する問題