iOS - 如果动画中断,则不调用UIPageViewController didFinishAnimating委托方法

时间:2017-10-19 00:31:11

标签: ios uipageviewcontroller

我的应用的布局为UIPageViewController占据屏幕的大部分,UITabBar位于底部。

我正面临边缘情况,用户向左/向右滑动并同时点按UITabBar,基本上当UIPageViewController处于转换状态时,中断转换切换到不同的屏幕。发生以下情况,

  1. 调用pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController])委托方法。

  2. 但永远不会调用pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool)委托方法。

  3. 在用户使用UIPageViewController切换回UITabBar之后,我们会发现viewDidAppear在内容ViewController上调用了UITabBar,而不是当前的内容在屏幕上呈现。

  4. 例如, 我的Tab1 - Tab2VC1有两个标签。用户可以在附加到VC2的{​​{1}}中的UIPageViewControllerTab1之间滑动,VC3附加到Tab2

    现在,用户位于Tab1VC1内的屏幕上显示UIPageViewController。如果用户在UIPageViewController中从VC1VC2轻扫并同时点击Tab2(您必须非常快速地执行此操作)。调用pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController])。但pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool)未被调用。

    然后,如果用户点击Tab1并返回UIPageViewController。在viewDidAppear上调用VC1,而屏幕上实际呈现VC2

    我知道这是一个边缘案例,可能是Apple的错误。想知道是否有人之前遇到过此问题,是否有任何解决方法/解决方案?

1 个答案:

答案 0 :(得分:1)

我遇到了这个问题。

如果更改选项卡,则转换时会发生变化,然后ViewController会发生变化。因此,控件从PageViewController转移到新的ViewController。 这就是委托回调停止的原因。

如果切换回PageViewController,您可能会注意到以下两点之一:

  • 加载初始页面。如果您在切换标签之前刷过不到一半的页面,就会发生这种情况。

  • 加载下一页(初始页面之后的页面)。如果您在切换标签之前已经翻过了一半以上的页面,就会发生这种情况。

它不完全是一个错误,只是控制在Cocoa中流动的方式。

没有这样的修复,但有一个解决方法。您可以在动画发生时禁用与TabBarController的交互,然后在完成后启用它。