2012-03-21 51 views
3

私はいくつかのページを持つUIPageViewControllerを持っています。各ページは同じビューコントローラですが、ページ番号は追跡され、PDFの正しいページが表示されます。問題は、各PDFページをカールエフェクトが動作する前にロードして描画する必要があることです(指を画面にスライドさせ、ロードするまで何も起こらない)。これをスピードアップする方法や次のページをプリロードする方法に関するアイデアはありますか?ご協力いただきありがとうございます。UIPageViewControllerを高速化する

答えて

6

私は今使っているアプリで同様の問題があります。私の解決策は、ロードされた前後のコントローラへの参照をルートビューコントローラのプロパティとして保持し、そこからビューをロードすることでした。私はクライアントがそれをはFlipBoardのように見えるようにを持っていたと主張したので私はPageViewControllerを使用しない...私はまた結果のGLTextureをキャッシュします。同様に動作するはずですが、現在のロード時に次のページと前のページを格納し、そのコントローラをloadNextPageなどの方法で渡します。 EDIT

:ここには私のプロジェクトから(私が簡略化されたこと)のサンプルです

最初のロード(独自のクラスを置き換える必要がありますので、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

ええ、それは私が思ったものです。どうすれば次のページを読み込むことができますか?クイックコードサンプルを私にくれますか?ご協力いただきありがとうございます! –

+0

私は上記の回答をサンプルで編集しました。うまくいけば、あなたのプロジェクトにそれを適用することができます – borrrden

+0

ありがとうたくさんの男! –