Вот код:
https: //www.dropbox .com / s / o42wy36x4qhrbpt / PDFScroller.zip
Я взял пример кода WWDC 2010 PhotoScroller
, который реализует вложенные UIScrollViews
для масштабирования, внутри UIScrollView
для подкачки страниц и выкачал то, что я думал, было бы минимальным количеством кода, необходимого для отображения многостраничного PDF вместо изображений.
Это работает. Но на моем iPhone4 это медленно, около трех секунд, чтобы нарисовать первую страницу, и еще медленнее на моем iPod Touch. Я могу наблюдать, как рисуют отдельные плитки. Этот же PDF-файл уже открывается быстрее, без видимого рисунка плитки, в альтернативной реализации CATiledLayer
, в которой я просто использую один CATiledLayer
/ UIScrollView
и нажимаю события, чтобы изменить страницы. Я хотел бы использовать эту технику PhotoScroller
, это очень приятно.
Я наблюдал за ней с помощью CPU Sampler в Инструментах, и это не похоже на код рендеринга PDF, похоже, что время потрачено на потоки и обмен сообщениями. Я был бы признателен, если бы кто-то мог помочь указать, что этот пример делает, чтобы понести накладные расходы.
Спасибо,
Джим
Обновление 1: я первоначально использовал технику класса TilingView
из примера кода определения
+ (Class) layerClass {
return [CATiledLayer class];
}
И затем рисование в - (void) drawRect: (CGRect) rect
, но переключение на явный подкласс CATiledLayer
в качестве первой попытки увидеть, является ли оно будет иметь значение, но это не так, и поэтому я оставил код как есть для публикации здесь. Отсутствует также [выпуск tiledLayer];
утечка в TilingView.
, поскольку ваш код содержит пару ошибок, и я не могу скомпилировать код, но я взглянул на файл PDF, который был включен в архив, и Я знаю причину, по которой ваш TilingView работает медленно.
Обычно, когда вы рисуете страницу pdf в CGContext
с помощью метода CGContextDrawPDFPage
: весь текст и векторная графика визуализируются, а другие вещи, такие как обычная графика в PDF, просто получаются нарисовано и кэшировано. Таким образом, не имеет значения, насколько велик PDF-файл, но имеет значение, есть ли в вашем PDF-файле векторная графика. Кажется, что у вас есть векторная графика в вашем PDF-файле, а также некоторые математические уравнения, поэтому он медленный. Я предлагаю вам попробовать другой PDF-файл, не содержащий векторной графики, и посмотреть, будет ли он быстрее.
Ура
Чжэн