如果快速刷卡,UIPageViewController didFinishAnimating不会被调用

我有一个按预期工作的UIPageViewController。 我可以向左和向右滚动,当我滚动每个方向时,调用委托方法didFinishAnimating 。 但是,如果我滚动太快,我最终会在没有调用didFinishAnimating的页面上,尽管它会被调用所有以前的页面。 有谁知道为什么会这样?

我认为无论如何都会在每次页面转换时调用didFinishAnimating (例如,即使转弯中止)。

这个bug在2017年仍然存在。我尝试了很多替代方法..现在我放弃了希望这将由Apple修复,我认为最好的方法是使用协议来绑定UIPageViewController和内容ViewController,所以我们可以通知viewDidAppear()中的UIPageViewController

我有同样的问题。 我试图使用UIScrollView delegate而不是UIPageViewController来解决问题。 这是一个棘手的方法,不建议使用。

1.在UIPageViewController中设置UIScrollView来设置委托:

 for (UIView *view in self.view.subviews) { if ([view isKindOfClass:[UIScrollView class]]) { UIScrollView *scroll = (UIScrollView *) view; scroll.delegate = self; } } 

2.override scrollViewWillBeginDragging:(UIScrollView *)scrollView

 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ [[NSNotificationCenter defaultCenter] postNotificationName:PageSwitchingBegan object:nil]; } - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { [[NSNotificationCenter defaultCenter] postNotificationName:PageSwitchingEnded object:nil]; } 

您也可以尝试覆盖- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView而不是scrollViewDidEndDragging来实现更好的结果。