UIPageViewController didFinishAnimating не вызывается, если быстро
У меня есть UIPageViewController, который работает так, как ожидалось. Я могу прокручивать влево и вправо, и метод делегата didFinishAnimating
вызывается, когда я прокручиваю каждое направление. Однако, если я прокручу слишком быстро, я попадаю на страницу, где didFinishAnimating
не вызывается, хотя она вызывается для всех предыдущих страниц. Кто-нибудь знает, почему это может произойти?
Я бы подумал, что didFinishAnimating
будет вызываться на каждом переходе на страницу независимо (например, даже если поворот был прерван).
Ответы
Ответ 1
Эта ошибка все еще здесь в 2017 году. Я пробовал много альтернативных способов. Теперь я отказался от надежды, что это будет исправлено Apple, и я думаю, что лучший способ - использовать протокол для привязки UIPageViewController с контентом ViewController, поэтому мы можем уведомить UIPageViewController в viewDidAppear()
Ответ 2
У меня такая же проблема. Я попытался использовать UIScrollView delegate
вместо UIPageViewController
для решения проблемы. Это сложный метод, который не рекомендуется использовать.
1.get 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
для достижения лучшего результата.