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 中管理页码的最佳方法是将页码信息作为属性直接存储在页面视图控制器中(即在包含您要显示的单个页面的视图控制器中)。

然后,如果您想显示带有页码的通用状态栏,您只需获取 UIPageViewController 的 viewControllers 属性,该属性会根据 UIPageViewController 设置返回一个或两个视图控制器。

因此,在伪代码中,当页面视图控制器询问其数据源哪些是新视图控制器来显示您的代码时: - 将获取当前视图控制器 - 将从它(它们)获取页码 - 将计算下一个或上一个页码(取决于页面卷曲/滑动方向) - 将向数据源询问新计算的页码视图控制器,并将为其页码属性分配新值

通过这种方式,您可以免受奇怪的动画行为的影响,并且您不需要在内存中保留可能导致问题的全局“currentIndex”,正如您所经历的那样。

于 2013-07-18T20:04:57.500 回答