0

問題は、3 ページまたは 4 ページをめくった後に現在のページ番号の更新を開始し、1、2、3、4、... から現在のページ番号の更新を開始することです。これは間違っています。逆の順序でページをめくると、12から13が表示され、次のページから現在のページ番号が逆の順序で更新されます。

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed{


if (!completed) {

    return;
}
  if (currentIndex<totalPages -1 ){

  [self displaycurrentIndex:currentIndex + 1];

     }else if (currentIndex>totalPages + 1){

          [self displaycurrentIndex:currentIndex - 1];   
     } 
 }

- (void) displaycurrentIndex:(NSUInteger)currentIndex {

self.navigationItem.title = [NSString stringWithFormat:
                             @"Page %i of %i",
                            currentIndex + 1,
                             CGPDFDocumentGetNumberOfPages(PDFDocument)];
}

この更新中のページ番号を最初から修正する方法と、逆の順序で修正する方法を教えてください。

編集:

取り外した後

if (!completed) {

return;
}

最初のページをめくった後に更新していますが、現在のページ番号を 20 の 0、次に 20 の 1 などから更新しますが、逆の順序でページをめくると、現在のページ番号が順方向に更新され、次に逆の順序で更新されます。

手伝ってくれてありがとう。

4

1 に答える 1

0

私の経験から (また、このクラス専用の過去の WWDC セッション ビデオでも確認されています)、UIPageViewController でページ番号を管理する最良の方法は、ページ番号情報をページ ビュー コントローラーに直接プロパティとして格納することです (つまり、表示する単一のページを含むView Controllerで)。

次に、ページ番号を含む汎用ステータス バーを表示する場合は、UIPageViewController の viewControllers プロパティを取得するだけで、UIPageViewController の設定に応じて 1 つまたは 2 つのビュー コントローラーが返されます。

したがって、ページビューコントローラーが新しいビューコントローラーであるデータソースにコードを表示するように要求するときの疑似コードでは: - 現在のビューコントローラーを取得します - それからページ番号を取得します - を計算します次または前のページ番号 (ページ カール/スワイプの方向に依存) - データ ソースに新しく計算されたページ番号を要求し、ビュー コントローラーのページ番号プロパティに新しい値を割り当てます。

このようにして、奇妙なアニメーション動作から保護され、経験したように、問題につながる可能性のあるグローバルな「currentIndex」をメモリに保持する必要がなくなります。

于 2013-07-18T20:04:57.500 に答える