Установка цвета фона / цвета подсветки для заданного диапазона строк с использованием Core Text - PullRequest
8 голосов
/ 21 декабря 2010

У меня есть текст с использованием Core Text в моем приложении для iPhone.Я использую NSAttributedString для установки определенных стилей в тексте для заданных диапазонов.

Я не могу найти атрибут для установки цвета фона / подсветки, хотя это может показаться возможным.Я не смог найти константу имени атрибута, которая звучала бы релевантно, и в документации есть только списки:

kCTCharacterShapeAttributeName
kCTFontAttributeName
kCTKernAttributeName
kCTLigatureAttributeName
kCTForegroundColorAttributeName
kCTForegroundColorFromContextAttributeName
kCTParagraphStyleAttributeName
kCTStrokeWidthAttributeName
kCTStrokeColorAttributeName
kCTSuperscriptAttributeName
kCTUnderlineColorAttributeName
kCTUnderlineStyleAttributeName
kCTVerticalFormsAttributeName
kCTGlyphInfoAttributeName
kCTRunDelegateAttributeName

Крейг Хокенберри, разработчик Twitterrific публично заявил в Twitter, что он использует Core Text для визуализации твитов, и Twitterrificимеет этот фон / выделение, о котором я говорю, когда вы касаетесь ссылки.

alt text

Любая помощь или указатели в правильном направлении были бы фантастическими, спасибо.

Редактировать: Вот ссылка на твит Крейг опубликовал упоминание «Основной текст, приписанные строки и много тяжелой работы», и продолжение , котороеупоминается использование метрик CTFrameSetter для определения того, пересекаются ли ссылки со ссылками.

Ответы [ 2 ]

3 голосов
/ 28 декабря 2010

В конце концов мне пришлось использовать методы метрик Core Text (получение диапазона, границ, происхождения линий и т. Д.), Чтобы вычислить ограничивающий прямоугольник ссылки.Получив прямоугольник для каждой строки, на которую распространяется ссылка, я перерисовал фон в контекст, прежде чем перерисовывать текст над ним.

Похоже на адскую работу, но она работает.

1 голос
/ 06 декабря 2012

С iOS 6, я думаю, вы можете получить нужный эффект с помощью: NSBackgroundColorAttributeName.Такие как:

[attributedString addAttribute:NSBackgroundColorAttributeName value:[UIColor yellowColor] range:selectedRange];
...