UIPageViewController - 到下一个视图控制器的动画过渡与方向变化混合

Posted

技术标签:

【中文标题】UIPageViewController - 到下一个视图控制器的动画过渡与方向变化混合【英文标题】:UIPageViewController - animated transition to next view controller mixes up with orientation change 【发布时间】:2019-02-07 13:27:01 【问题描述】:

我正在开发一个使用 UIPageViewController 的应用程序。在 UIPageViewController 子类中,我正在设置下一个视图控制器,如下所示:

guard let currentViewController = self.viewControllers?.first else  return 
guard let nextViewController = dataSource?.pageViewController(self, viewControllerAfter: currentViewController) else  return 

self.setViewControllers([nextViewController], direction: .forward, animated: true, completion:  (finished) in         
            // some finishing work
)

该应用支持纵向和横向。到下一个视图控制器的过渡是动画的。当该动画开始时,如果在此之后开始更改方向,则在两个动画结束时将有两个部分可见的视图控制器,而不仅仅是下一个。

我猜它在过渡到下一个视图控制器开始之前计算偏移量,然后使用此偏移量启动动画,然后旋转并调整视图大小,但不重新计算偏移量。或类似的东西。有谁知道如何解决或解决这个问题。

【问题讨论】:

【参考方案1】:

我只对此做了一个快速的初步测试,但它可能为您完成这项工作。

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) 

    if let currentViewController = self.viewControllers?.first 

        coordinator.animate(alongsideTransition:  _ in
            // nothing here
        )  [unowned self] _ in
            self.setViewControllers([currentViewController], direction: .forward, animated: false, completion:  (finished) in
                // some finishing work
            )
        

    

    super.viewWillTransition(to: size, with: coordinator)


根据“一些整理工作” 的含义,它可能会有点棘手……可能需要测试finished 状态。

【讨论】:

感谢您的建议。我试过了,但有时我还是会遇到这个问题。

以上是关于UIPageViewController - 到下一个视图控制器的动画过渡与方向变化混合的主要内容,如果未能解决你的问题,请参考以下文章

UIPageViewController 的 UIPageControl 在滚动到下一个视图控制器时有时不会更新

在 UIPageViewController 中拖动项目

在 UIPageviewcontroller 中停止 HTML5 音频

获取 UIPageViewController 的滚动位置

减慢 UIPageViewController 分页

快速滚动 UIPageViewController 阻止 viewcontroller 更新