我正在开发一个使用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
})
该应用程序支持纵向和横向。到下一个视图控制器的过渡将以动画形式显示。当该动画开始时,如果在此之后开始方向更改,则在两个动画结束时将有两个部分可见的视图控制器,而不仅仅是下一个。
我猜它在过渡到下一个视图控制器开始之前计算偏移量,然后使用此偏移量开始动画,然后旋转视图并调整视图大小,但不重新计算偏移量。或类似的东西。有没有人知道如何修复或解决此问题。
我只对此进行了快速的初步测试,但它可能会为您完成这项工作。
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
状态。