I have a UIPageViewController that works as expected. I can scroll left and right and the delegate method didFinishAnimating
is called when I scroll each direction. However, if I scroll too quickly I end up on a page where didFinishAnimating
is not called, though it is called for all previous pages. Does anyone know why this might be happening?
I would think that didFinishAnimating
would be called on every page transition regardless (e.g., even if the turn was aborted).
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()
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With