UIPageViewController didFinishAnimating not called if swiped quickly
I've got the same issue. I tried to use the UIScrollView delegate
instead of UIPageViewController
to solve the issue. This is a tricky method, not recommend to use.
1.get the UIScrollView
in UIPageViewController
to set delegate:
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];
}
You may also try override - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
instead of scrollViewDidEndDragging
to achieve better result.
This bug is still here in 2017.. I tried many alternative ways.. now I gave up the hope that this will be fixed by Apple and I think the best way is to use protocol to bound UIPageViewController
with content ViewController
, so we can notify UIPageViewController
in viewDidAppear()