Быстрая и удобная программа просмотра PDF-файлов для iPhone / iPad / iOS - советы и подсказки?

В последнее время появилось много вопросов о рисовании PDF-файлов.

Да, вы можете отображать PDF ' очень легко с UIWebView , но это не может обеспечить производительность и функциональность, которые вы ожидаете от хорошей программы просмотра PDF.

Вы можете нарисовать страницу PDF в CALayer или к UIImage . У Apple даже есть образец кода, чтобы показать, как нарисовать большой PDF-файл в масштабируемом UIScrollview

, но те же проблемы продолжают возникать.

Метод UIImage:

  1. PDF-файлы в UIImage don не оптически масштабируемость, а также подход слоев.
  2. ЦП и память влияют на создание UIImages из PDFcontext ограничивает / предотвращает его использование для создания рендеринг новых уровней масштабирования в реальном времени.

CATiledLayer Method:

  1. Существуют значительные накладные расходы (время) отрисовка полной страницы PDF в CALayer : отдельные тайлы можно увидеть при рендеринге (даже с настройкой tileSize)
  2. CALayers не могут быть подготовлены заранее времени (отображается за пределами экрана).

Как правило, программы просмотра PDF также занимают много памяти. Даже отслеживайте использование памяти в примере Apple с масштабируемым PDF-файлом.

В моем текущем проекте я разрабатываю программу просмотра PDF-файлов и визуализирую UIImage страницы в отдельном потоке (здесь тоже есть проблемы!) и представляя его в масштабе x1. CATiledLayer срабатывает, когда масштаб> 1. iBooks использует аналогичный двойной подход: если вы прокручиваете страницы, вы можете увидеть версию страницы с более низким разрешением менее чем за секунду до появления четкой версии.

Я визуализирую 2 страницы с каждой стороны страницы в фокусе, поэтому что PDF-изображение готово замаскировать слой перед тем, как начать рисование. Страницы снова уничтожаются, когда они находятся на +2 страницах от выбранной страницы.

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

РЕДАКТИРОВАТЬ: Некоторые советы (Фото: Люк Макнейс, VdesmedT, Мэтт Галлахер, Йоханн):

  • Сохраняйте любые носители на диск, когда можете.

  • Используйте плитки большего размера, если рендеринг на TiledLayers

  • init часто используемые массивы с объектами-заполнителями, альтернативно другой подход к проектированию - этот

  • Обратите внимание, что изображения будут отображаться быстрее, чем CGPDFPageRef

  • Используйте NSOperations или GCD & Блоки для подготовки страниц вперед времени.

  • call CGContextSetInterpolationQuality (ctx, kCGInterpolationHigh); CGContextSetRenderingIntent (ctx, kCGRenderingIntentDefault); до CGContextDrawPDFPage , чтобы уменьшить использование памяти при отрисовке

  • инициализации ваших NSOperations с плохой идеей docRef (docRef). docRef в одноэлемент.

  • Отменить ненужные NSOperations Когда вы можете, особенно если они будут использовать память, остерегайтесь оставлять контексты открытыми!

  • Переработайте объекты страницы и уничтожьте неиспользуемые представления

  • Закройте все открытые контексты, как только они вам не понадобятся

  • при получении предупреждений об освобождении памяти и перезагрузите DocRef и все кеши страниц

Другие возможности PDF: После перехода к окну добавления вложения и возврата назад вертикальная полоса прокрутки проходит за нижний край ...

У меня проблема с вертикальной полосой прокрутки в настраиваемой форме списка SharePoint в IE. После перехода к окну добавления вложения и возврата назад вертикальная полоса прокрутки проходит за нижний край окна , так что невозможно прокрутить до самого низа формы.

Изменение размера окна решает эту проблему, поэтому возможно, если бы я мог каким-то образом заставить окно пересчитывать полосу прокрутки из javascript без изменения размера окна, это было бы простым обходным решением.

Можно ли запустить такое «изменение размера» и как?

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

Спасибо!

1
задан axk 8 October 2010 в 10:40
поделиться