Как рисовать изображения среди форматированного текста с помощью CoreText? (IOS) - PullRequest
9 голосов
/ 10 октября 2010

Я могу рисовать форматированный текст с помощью Core Text, проблема заключается в размещении изображений, текущих вместе с текстом.(iOS SDK 4.1)

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

Here is a word <an icon image>, and another words.
The image(<another icon>) should be placed like a glyph.
It's part of text, not an example.

<icon> - это изображения.(Это не код. Просто иллюстрация.)

Я могу нарисовать это, выложив их все вручную, но слишком сложно поддерживать сложные способы размещения текста.Поэтому я нахожу способ нарисовать это с помощью Core Text.

Ответы [ 2 ]

9 голосов
/ 11 октября 2010

Я получил решение.

Ключ к выкладке нетекстового контента - CTRunDelegate.Core Text не поддерживает нетекстовое содержимое, поэтому вам необходимо выделить для них пустые места, а затем нарисовать или разместить их самостоятельно.

Часть NSAttributedString с атрибутом kCTRunDelegateAttributeName будет вызывать зарегистрированный обратный вызовопределить ширину каждого глифа.Это позволит вам создать пустое пространство для каждого нетекстового объекта.

Однако после рисования текста с помощью Core Text информация о макете, сохраненная с помощью frame / line / run, будет недействительной.Поэтому вы должны рисовать / размещать нетекстовое содержимое после макета с помощью framesetter / typesetter, но перед рисованием.

Эта ссылка описывает базовое использование CTRunDelegate:
Как использовать CTRunDelegate в iPad?


Проблема с Core Text.Первоначально CTRunDelegate был разработан для поддержки переменной ширины и вертикального выравнивания с помощью CTRunDelegateCallbacks.getAscent и CTRunDelegateCallbacks.getDescent.Но функция вертикального выравнивания в настоящее время не работает.Это может быть ошибкой.

Я описал эту проблему здесь: Выравнивание вертикального центра текста с несколькими размерами вместо базовой линии в Core Text в iOS

Если у вас есть информация об этомпроблема, см. мой вопрос по ссылке.

3 голосов
/ 10 мая 2013

Вы просто устанавливаете делегата для данного CTRun, и объект делегата отвечает за то, чтобы сообщить Базовому тексту, что такое пространство подъема CTRun, пространство спуска и ширина.имеет CTRunDelegate, который он спрашивает у делегата - какую ширину я должен оставить для этого куска данных, как высоко он должен быть?Таким образом, вы создаете дыру в тексте, а затем рисуете свое изображение именно в этом месте.

enter image description here

Вот блог о Core Text. У него есть ответ.

Как создать простое приложение для журнала с базовым текстом

...