Базовый текст - получить координаты пикселей из NSRange - PullRequest
7 голосов
/ 18 декабря 2010

Как мне получить CGRect из NSRange для текста, отображаемого с помощью Core Text?

Я использую Core Text с NSAttributedString.

Ответы [ 2 ]

9 голосов
/ 19 декабря 2010

Это абсолютная боль, но это можно сделать.

Вам нужно получить все строки в кадре, используя CTFrameGetLines(), проверьте, находится ли их диапазон символов в диапазоне, который вы ищете, используяCTLineGetStringRange(), используйте CTLineGetTypographicBounds(), чтобы найти, насколько велика будет сама линия, и используйте CTLineGetOffsetForStringIndex(), чтобы определить фактическую позицию начального / конечного символа диапазона (если линия является лишь поддиапазоном желаемого диапазона).

Комбинируя все это и добавляя смещения и высоты, можно получить то, что вы хотите.Обратите внимание, что CTLineGetImageBounds() не работает без графического контекста (и, насколько я понимаю, в любом случае это довольно дорого) и не является необходимым для решения этой проблемы.

2 голосов
/ 19 декабря 2010

Сначала определите линию (и), в которой находится интересующий вас диапазон.Затем вызовите CTLineGetOffsetForStringIndex(), чтобы получить смещение конкретной позиции строки от начала строки.Вместе с CTLineGetImageBounds() должно быть возможно вычислить CGPoint позицию первого и последнего символов в вашем диапазоне.

...