pageviewcontroller 动画完成后更新当前页码

Posted

技术标签:

【中文标题】pageviewcontroller 动画完成后更新当前页码【英文标题】:Update current page number after pageviewcontroller animation is completed 【发布时间】:2013-07-18 19:20:20 【问题描述】:

问题是它会在您翻过 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 更新当前页码,依此类推,但是当以相反的顺序翻页时,它仍然会向前更新当前页码,然后反向顺序。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

根据我的经验(在过去专门针对此类的 WWDC 会话视频中也证实了这一点),在 UIPageViewController 中管理页码的最佳方法是将页码信息作为属性直接存储在页面视图控制器中(即在包含您要显示的单个页面的视图控制器中)。

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

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

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

【讨论】:

以上是关于pageviewcontroller 动画完成后更新当前页码的主要内容,如果未能解决你的问题,请参考以下文章

animate() 不适用于 IE 中的不透明度

快速在 PageViewControllers 中传递数据

从 UIViewController 移动到 SKcene

如何判断UIPageViewController页面是否转动是由于滑动/平移或点击

SwiftUI 中的动画文本循环

网页浏览与页面卷曲动画 ios