Как создать интерфейс предварительного просмотра документов iPad, подобный тому, который есть в iWorks для iPad - PullRequest
7 голосов
/ 29 декабря 2010

Готов присудить премию +500 за рабочий пример.

Есть только 2 примера исходного кода, о которых я знаю, чтобы реализовать интерфейс предварительного просмотра документов на iPad, например, те, которые можно найти в Number, Pages,и т.д.

infoNgen и OmniGroup Framework

Есть ли другие примеры?infoNgen - хороший простой пример, однако код чрезвычайно небрежный и ужасно написанный, очень неорганизованный.

OmniGroup - потрясающая библиотека, но слишком сложная для простых проектов.

alt text

Обновление

Мне удалось разбить проект infoNgen и создать просмотрщик пустых документов с предварительным просмотром HTML, который, кажется, довольно хорошо работает с обновлением информации в документе исинхронизировать его с предварительным просмотром.Единственная проблема, которую необходимо решить, - сохранить документы при выходе и повторном запуске приложения. +500 вознаграждение все еще доступно для рабочего примера, однако я не собираюсь открывать вознаграждение, если нет опубликованных рабочих примеров.

1 Ответ

13 голосов
/ 03 января 2011

«Вид оболочки» - это контроллер основного вида, который будет отображать всю карусель предварительного просмотра.

Сама «карусель» представляет собой UIScrollView.Просто создайте представление прокрутки и установите для свойства pagingEnabled значение YES.Выложите его в соответствующие размеры, установив рамку, а затем добавьте его в свой контроллер вида-оболочки.Вы также захотите установить свойство contentSize вида карусели достаточно большим.Рассчитайте это, умножив количество документов плюс ширину еще двух документов на ширину карусели. Если вы хотите, чтобы документы на обеих сторонах отображались немного, умножьте количество документов на ширину вида прокрутки минус несколько пикселей.

РЕДАКТИРОВАНИЕ

На самом деле, поиск этой проблемы немного привел меня к этому посту , в котором описан альтернативный метод реализации этого.По сути, вы оборачиваете представление прокрутки внутри пользовательского подкласса UIView, который перенаправляет касания в UIScrollView.Это необходимо, потому что UIScrollView может «страница» только для страниц, которые так же широки, как он.Используя мой метод «настроить боковые виды на несколько пикселей», вы получите хороший предварительный просмотр, но смещения заставят предварительные просмотры прыгать при прокрутке.(Я попробовал свой метод, собирая вместе пример кода. Как я только что объяснил, он не работал.) Я собираюсь попробовать еще один метод перед использованием пользовательской оболочки.(Интересно, сработали бы вставки контента.)

Конец редактирования

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

Предварительный просмотр документа может представлять собой любой объект, который вам нравится. Как вы уже упоминали, для визуализации HTML можно использовать UIWebView.Независимо от того, что вы хотите использовать для представления своих миниатюр, уловка будет их выкладывать.

Я предполагаю, что у вас есть массив объектов, хотя вы можете использовать Core Data для хранения вашей информации,Чтобы показать предварительный просмотр документов, добавьте их в представление прокрутки, но в правильном месте вдоль координаты «X».Чтобы рассчитать это значение, умножьте индекс текущего документа на ширину прокрутки.Примените это значение, используя метод setFrame предварительного просмотра документа.Вы также захотите визуализировать предварительный просмотр перед текущим, а затем последующим, чтобы у вас была плавная анимация.

Для обработки рендеринга и прокрутки вам понадобится превратить оболочку в UIScrollViewDelegate.Делегат должен указать UIScrollView удалять и повторно визуализировать scrollview каждый раз, когда анимация прокрутки завершается.

Чтобы обработать «эффект карусели» (цикл, который происходит между первым и последним документами), ваш UIScrollViewDelegate долженпроверьте свойство contentOffset и определите, находимся ли мы на последнем объекте.Если последний объект отображается, визуализируйте первый объект справа, как и любой другой.Если нужный объект затем прокручивается до, вы используете код [scrollView scrollToRect: CGRectMake(0,0,scrollView.rect.size.width,scrollView.rect.sizeheight) animated:NO]; для быстрого перехода к началу.(Сделайте то же самое для первого предварительного просмотра. Отобразите первый и последний слева, обрабатывая их одинаково при необходимости).

Надеюсь, этот ответ несколько поможет.Я отправлю код, когда смогу.

Удачи!

Редактировать 2:

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

...