Я создаю подсветку синтаксиса для iPhone, и для отображения текста в нескольких форматах я создал подкласс UIView и изменил метод drawRect:
, чтобы каждая строка отображалась с правильной подсветкой синтаксиса (выделение выполнено ранее с RegEx текст рисуется с CGContextShowTextAtPoint()
по одной строке за раз). Все работает нормально, я сохраняю каждую строку текста как NSString в NSMutableArray, я управляю клавиатурой через скрытый UITextField и его методы делегата, курсор представляет собой мигающий CALayer, который можно перемещать касаниями, и у меня есть собственное представление прокрутки это обрабатывает прокрутку. Однако у меня есть две проблемы, которые я, кажется, не могу обернуть вокруг:
Перенос слов, сейчас текст просто продолжает уходить с левого края экрана. Чтобы ускорить процесс, я перерисовываю только те части представления, которые изменились (обычно это только редактируемая строка, но иногда и строки ниже, например, если вы нажмете кнопку возврата на полпути через документ) с помощью setNeedsDisplayInRect:
. Это усложняет перенос слов, потому что тогда вам нужно нарисовать более одной линии на экране, хотя это все еще только один объект в массиве.
Максимальный размер содержимого UIViews составляет 1024x1024, что соответствует примерно 64 строкам. Мне нужна способность отображать больше, чем это. Я думаю об использовании нескольких слоев CAL один за другим, но у меня возникают проблемы с отображением содержимого в слои (используя drawLayer:inContext:
и drawInContext:
).
Итак, мои вопросы:
- Есть ли у кого-нибудь, даже общие, предложения о том, как выполнить любой из этих двух пунктов. Или,
- Кто-то уже написал собственный вид для рисования текста, который обрабатывает эти вещи, которые я мог бы использовать вместо этого.
Спасибо
Кайл
РЕДАКТИРОВАТЬ: Проблема прокрутки в значительной степени решена, однако у меня все еще есть проблемы с переносом слов. Моя проблема в том, что все делается построчно: представление обновляется по одной строке за раз, текст сохраняется в виде массива строк, маркер выделяет одну строку за раз и т. Д. И имеет один индекс в массиве (один текстовая строка), занимающая несколько строк на экране, порождает некоторые проблемы, например, мне пришлось реализовать собственный подвижный курсор, и когда вы перемещаете курсор, он должен иметь возможность поворачивать строку дисплея (что определяется делением touch.x на высота строки) в текстовую строку (индекс в массиве). Есть идеи?