понедельник, 21 октября 2013 г.

Задали тут вопрос про CoreText, GlyphRunnerDelegate и "обтекание картинок текстом"

Задали тут вопрос про CoreText, GlyphRunnerDelegate и "обтекание картинок текстом".

По мотивам - http://18delphi.blogspot.ru/2013/10/coretext-nsattributedstring.html

Вопрос примерно такой - "позволяет ли CoreText сделать обтекание картинок текстом".

Ответ - "ЗА ПРОСТО ТАК" - НЕ ПОЗВОЛЯЕТ.

GlyphRunnerDelegate в CoreText - это всего лишь Glyph в "терминах GoF". Т.е. НА САМОМ деле - картинка для CoreText - это всего лишь - "буква".

Что же можно получить "практически за просто так"?

Немногое. Но может быть и это вам понравится.

НА САМОМ ДЕЛЕ при рендеринге NSAttributedString (CFAttributedString) в функцию CTCreateFrame подаётся НЕ ПРЯМОУГОЛЬНИК, а PATH - замкнутая линия, ограничивающая РЕГИОН.

А регион может быть - "ЛЮБОЙ". И с "дырками" - тоже.

Соответственно - если вы знаете - ГДЕ в вашем "параграфе" (NSAttributedString) располагаются картинки - вы можете - ЗАРАНЕЕ "вырезать дырки" в области вывода.

И CoreText - "сам" расположит текст с учётом этих "дырок".

Всё бы ничего. Но!

CoreText это сделает БЕЗ УЧЁТА границ слов. Он просто "порвёт слова" на границах "дырок".

Т.е. слово "упрётся" в дырку справа и продолжится от неё слева, когда она кончится.

Если же вы хотите сделать "НАСТОЯЩЕЕ" обтекание КАРТИНОК текстом с УЧЁТОМ границ слов, то придётся повозиться и многое "сделать руками".

Позже - я может быть пишу свои соображения на этот счёт. Они не очень простые. И сводятся к многопроходному нарезанию NSAttributedString на "куски между картинками".

Комментариев нет:

Отправить комментарий