3

我有一个包含多个页面的 UIPageViewController。每个页面都是同一个视图控制器,但会跟踪页码并显示 PDF 的正确页面。问题是每个 PDF 页面都需要在卷曲效果起作用之前加载和绘制(您在屏幕上滑动手指,直到加载之前什么都没有发生)。关于如何加快速度或预加载下一页的任何想法?谢谢你的帮助。

4

1 回答 1

6

我现在正在使用的应用程序中有类似的问题。我的解决方案是保留对加载的上一个和下一个控制器的引用作为我的根视图控制器的属性,然后从那里加载视图。我不使用 PageViewController 因为客户坚持认为它必须看起来像 FlipBoard……所以我还缓存了生成的 GLTexture。不过,它应该类似地工作,只需在当前页面加载时存储下一页和上一页,并将该控制器传递到您的“loadNextPage”或任何方法中。

编辑:这是我的项目 First Load 中的一个示例(我已简化)

(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。

于 2012-03-21T03:23:16.603 回答