我有一个按预期工作的UIPageViewController。我可以向左和向右滚动,当我滚动每个方向时调用委托方法didFinishAnimating
。但是,如果我滚动得太快,我最终会在一个未调用didFinishAnimating
的页面上,尽管它会被调用所有以前的页面。有谁知道为什么会发生这种情况?
我认为didFinishAnimating
会在每次页面转换时被调用(例如,即使转弯已中止)。
答案 0 :(得分:10)
这个bug在2017年仍然存在。我尝试了许多替代方法..现在我放弃了希望这将由Apple修复,我认为最好的方法是使用协议绑定UIPageViewController与内容ViewController,所以我们可以在viewDidAppear()
中通知UIPageViewController答案 1 :(得分:2)
我遇到了同样的问题。我尝试使用UIScrollView delegate
代替UIPageViewController
来解决问题。 这是一个棘手的方法,不建议使用。
1.点击UIScrollView
中的UIPageViewController
设置委托:
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
来获得更好的结果。