2012-03-21 83 views
3

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

回答

6

我在我现在使用的应用程序中有类似的问题。我的解决方案是将加载的前一个和下一个控制器的引用保留为我的根视图控制器的属性,然后从那里加载视图。我不使用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。

+0

是的,这就是我的想法。我将如何加载下一页?你能给我一个快速的代码示例吗?谢谢你的帮助! – 2012-03-21 04:48:15

+0

我用样本编辑了上面的答案......希望你可以将它应用到你的项目 – borrrden 2012-03-21 05:50:04

+0

非常感谢你! – 2012-03-21 19:19:58