Почему этот код CATiledLayer / PDF медленный?

Вот код:

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.

8
задан jbm 5 November 2016 в 17:54
поделиться

1 ответ

, поскольку ваш код содержит пару ошибок, и я не могу скомпилировать код, но я взглянул на файл PDF, который был включен в архив, и Я знаю причину, по которой ваш TilingView работает медленно.

Обычно, когда вы рисуете страницу pdf в CGContext с помощью метода CGContextDrawPDFPage : весь текст и векторная графика визуализируются, а другие вещи, такие как обычная графика в PDF, просто получаются нарисовано и кэшировано. Таким образом, не имеет значения, насколько велик PDF-файл, но имеет значение, есть ли в вашем PDF-файле векторная графика. Кажется, что у вас есть векторная графика в вашем PDF-файле, а также некоторые математические уравнения, поэтому он медленный. Я предлагаю вам попробовать другой PDF-файл, не содержащий векторной графики, и посмотреть, будет ли он быстрее.

Ура

Чжэн

2
ответ дан 5 December 2019 в 20:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: