Ускорить UIPageViewController - PullRequest
       9

Ускорить UIPageViewController

3 голосов
/ 21 марта 2012

У меня есть UIPageViewController с несколькими страницами.Каждая страница является одним и тем же контроллером представления, но номер страницы отслеживается и отображается правильная страница PDF.Проблема заключается в том, что каждая страница PDF должна быть загружена и прорисована до того, как сработает эффект скручивания (вы проводите пальцем по экрану, и ничего не происходит, пока не будет загружен).Любые идеи о том, как ускорить это или предварительно загрузить следующую страницу?Спасибо за вашу помощь.

1 Ответ

6 голосов
/ 21 марта 2012

У меня похожая проблема в приложении, которое я сейчас использую. Моим решением было сохранить ссылку на загруженные предыдущий и следующий контроллеры как свойства моего корневого контроллера представления, а затем просто загрузить представление оттуда. Я не использую PageViewController, потому что клиент настоял, чтобы у было , чтобы он выглядел как FlipBoard ... поэтому я также кеширую результирующую GLTexture. Это должно работать аналогично, просто сохраните следующую и предыдущую страницу при загрузке текущей и передайте этот контроллер в свой «loadNextPage» или любым другим способом.

РЕДАКТИРОВАТЬ: Вот пример (который я упростил) из моего проекта

Первая загрузка (NH - префикс для моей программы, поэтому вам нужно будет заменить ваши собственные классы):

NHViewController *child = [NHViewController loadPageNum:actualNum];
[self.view addSubview:child.view];
self.curController = child;
child.delegate = self;
[self initializePages:NHPageLoadBoth];

Последующие загрузки (переворачивание страницы):

    NHPageLoadSettings pageToLoad = NHPageLoadNext;
    if(direction == NHPageDirectionNextPage)
    {
        self.prevController = self.curController;
        self.curController = self.nextController;
        self.nextController = nil;
    }
    else
    {
        self.nextController = self.curController;
        self.curController = self.prevController;
        self.prevController = nil;
        pageToLoad = NHPageLoadPrev;
    }

    UIView *nextView = self.curController.view;
    [self.view addSubview:nextView];
    [mCurView removeFromSuperview];
    mCurView = nextView;

    [self initializePages:pageToLoad];

Инициализация страниц:

- (void)initializePages:(NHPageLoadSettings)pagesToLoad
{
    if(pagesToLoad & NHPageLoadNext)
    {
        NSUInteger nextPageNum = [self.curController.pageNum unsignedIntegerValue]+1;
        self.nextController = [NHViewController loadPageNum:nextPageNum];
    }
    if(pagesToLoad & NHPageLoadPrev)
    {
        NSUInteger prevPageNum = [self.curController.pageNum unsignedIntegerValue]-1;
        self.prevController = [NHViewController loadPageNum:prevPageNum];
    }
}

Таким образом, у вас всегда будут готовы соседние страницы. Затем вместо того, чтобы создавать их в методе, который извлекает следующую или предыдущую страницу в UIPageViewController, просто передайте self.nextController или self.prevController.

...