Создание отформатированных строк текста - PullRequest
0 голосов
/ 18 октября 2010

Мне нужно иметь возможность читать текст, помеченный с использованием XML для форматирования, и отображать его на отформатированном iPad. Одна хитрость в том, что мне нужно поддерживать сноски.

Мне нужно иметь возможность читать источник, анализировать источник, создавать приписанную строку для источника, создавать строки. Затем мне нужно написать строки в текст или сноски, пока экран не заполнится.

Мне сказали, что основной текст - это то, что мне нужно использовать. Однако, как и остальная документация Apple, документация Core Text просто смущает.

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

Учитывая разнообразие приложений, которые должны были бы делать именно это, я не могу найти никаких примеров вообще. Некоторые из основных текстовых функций, которые только «задокументированы» в самых смутных терминах, не генерируют хитов Google, кроме яблочной «документации».

Может кто-нибудь объяснить, как можно выполнить этот программный тест?

Спасибо

1 Ответ

1 голос
/ 18 октября 2010

Существует множество потенциальных подходов, но можно использовать CTTypeSetter. Детали, которые вы упускаете, - это функции CTTypeSetterSuggestLineBreak и CTTypeSetterSuggestLineBreakWithOffset. Те принимают аргумент ширины.

Другой подход заключается в использовании CTFrameSetter, который в любом случае просто использует CTTypeSetter для внутреннего использования. Затем вы можете вызвать CTFrameGetLines для кадра, полученного из установщика кадров, и визуализировать строки по отдельности с помощью CTLineDraw. Используйте CGContextSetTextPosition, чтобы указать Core Graphics, где рисовать каждую линию. Если вы хотите выяснить, какие символы в исходной строке представлены каждой строкой, вы можете использовать CTLineGetStringRange.

Поскольку звучит так, будто вы новичок в Core Text, обратите внимание, что его система координат имеет начало координат в нижнем левом углу экрана, а ось Y увеличивается по мере того, как вы поднимаетесь по экрану. В остальной части UIKit используется противоположное соглашение (начало слева вверху, ось Y увеличивается по мере спуска). Вы можете использовать CGContextScaleCTM( context, 1, -1 ) и CGContextTranslateCTM, чтобы исправить это. Вы также, вероятно, захотите позвонить CGContextSetTextMatrix( context, CGAffineTransformIdentity ), чтобы сделать отображение текста, как ожидалось.

...