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 для достижения лучшего результата.