Я реализую средство просмотра документов с возможностью выделения / аннотации для пользовательского формата документов на iPad.Документы довольно длинные (от 100 до 200 страниц, если напечатаны на бумаге), и мне было трудно найти правильный подход.Вот требования:
1) Базовое форматирование с расширенным текстом: контроль левого / правого поля.Управление именем шрифта, размером, цветом переднего плана / фона и межстрочным интервалом.Жирный, курсив, подчеркивание и т. Д.
2) Выделение и выделение произвольных областей текста (не ограниченных границами абзаца, как в Safari / UIWebView).
3) Настройка обрезки /Всплывающее окно копирования / вставки (UIMenuController) Это одно из основных требований приложения.
Моя первая реализация была основана на UIWebView.Я только что представил документ как HTML с CSS для стилизации текста.Но я не смог получить желаемое поведение для выделения текста (через границы абзаца), и UIMenuController не может быть настроен из UIWebView.
Поэтому я начал работать над подходом javascript, подделывая текст устройства-выбор поведения с использованием JQuery для перехвата сенсорных событий и динамического изменения DOM для изменения цвета фона выделенных областей текста.Я создал фальшивый элемент управления UIMenuController как скрытый DIV, позиционируя и скрывая его, когда была активная область выделения.
Не слишком потертый.
Основная проблема в том, что это SLOOOOOOOW.Пролистывать документ приятно и быстро, но динамическое изменение DOM не очень быстро.Кроме того, я не мог понять, как воссоздать лупу лупы, поэтому мой искусственный графический интерфейс для выделения текста не выглядит так же, как нативная реализация.Кроме того, я еще не реализовал коммуникационный мост между слоем javascript и слоем Objective-C (где живет остальная часть приложения), но это создавало огромные проблемы.
Так что яЯ смотрел на CoreText, но в Интернете есть несколько драгоценных примеров.Я потратил немного времени на эту простую небольшую демонстрацию:
http://github.com/jonasschnelli/I7CoreTextExample/
Он показывает, как использовать CoreText для рисования строки NSAttributedText в UIView.Но у него есть свои проблемы: он не реализует поведение выделения текста и не представляет UIMenuController, поэтому я не знаю, как это сделать.И, что более важно, он пытается нарисовать весь документ сразу, с существенным снижением производительности для длинных документов.Мои документы могут содержать тысячи абзацев, и на экране одновременно отображается менее 1% документа.
С другой стороны, эти документы уже содержат точную информацию о форматировании.Я знаю точное положение страницы каждой строки текста, поэтому мне не нужен механизм верстки.
Кто-нибудь знает, как реализовать такой вид представления с помощью CoreText?Я понимаю, что полноценная реализация является излишним для такого вопроса, но я ищу хороший пример CoreText с несколькими основными требованиями:
1) Точное управление макетом и форматированием (с использованием метрик форматированияи стили текста, которые я уже рассчитал).
2) Произвольный выбор текста.
3) Настройка UIMenuController.
4) Эффективная переработка ресурсов для выключенияэкранные объекты.
Я был бы рад реализовать свою собственную переработку, когда текстовые элементы прокручиваются вне экрана, но разве это не потребовало бы повторной реализации UIScrollView?
Я - брендновичок в разработке для iPhone и все еще привыкаю к Objective-C, но я работаю на других языках (Java, C #, flex / actionscript и т. д.) уже более десяти лет, поэтому я уверен в своей способности получитьпроделанная работа, если бы я только лучше почувствовал iPhone SDK и общие шаблоны кодирования для подобных вещей.Это только у меня, или документация SDK действительно отстой?
В любом случае, спасибо за вашу помощь!