加速UIPageViewController

时间:2012-03-21 02:34:30

标签: iphone objective-c ios ipad uipageviewcontroller

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

1 个答案:

答案 0 :(得分: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。