【问题标题】:UIPageViewController didFinishAnimating not called if swiped quickly如果快速滑动,则不会调用 UIPageViewController didFinishAnimating
【发布时间】:2014-06-17 14:27:43
【问题描述】:

我有一个按预期工作的 UIPageViewController。我可以左右滚动,当我滚动每个方向时会调用委托方法didFinishAnimating。但是,如果我滚动得太快,我最终会进入一个没有调用 didFinishAnimating 的页面,尽管它会为所有以前的页面调用。有谁知道为什么会发生这种情况?

我认为didFinishAnimating 会在每次页面转换时被调用,不管(例如,即使轮到中止)。

【问题讨论】:

  • 我已经研究这个问题一段时间了,它看起来很可能是 UIPageViewController 实现中的一个错误。我正在讨论摆脱 UIPageViewController 并使用自定义 UIScrollView 实现来解决这个错误。
  • 很高兴知道其他人能够重现此行为。
  • 嗨,您有解决办法吗?

标签: ios objective-c cocoa-touch uipageviewcontroller


【解决方案1】:

这个错误在 2017 年仍然存在.. 我尝试了许多替代方法.. 现在我放弃了 Apple 修复这个问题的希望,我认为最好的方法是使用协议将 UIPageViewController 与内容 @ 绑定987654322@,所以我们可以在viewDidAppear()中通知UIPageViewController

【讨论】:

  • 我遇到了同样的问题,我在同一个代码块中初始化和分配dataSourcedelegate,我注意到delegate 方法没有被调用。然后我在初始化时分配了dataSource,在后台进程调用delegate 方法之后分配了delegate。这是一个奇怪的错误,我猜他们(Apple)在 2017 年打破了它。
【解决方案2】:

我也有同样的问题。我尝试使用UIScrollView delegate 而不是UIPageViewController 来解决问题。 这是一个棘手的方法,不推荐使用。

1.获取UIPageViewController中的UIScrollView设置委托:

for (UIView *view in self.view.subviews) {
    if ([view isKindOfClass:[UIScrollView class]]) {
        UIScrollView *scroll = (UIScrollView *) view;
        scroll.delegate = self;
    }
}

2.覆盖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 以获得更好的结果。

【讨论】:

  • 这个实现没有满足人们点击页面控制点来切换页面的情况。所以你可能仍然需要在willTransitionToViewControllersdidFinishAnimating上实现UIPageViewControllerDelegate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 2018-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
相关资源
最近更新 更多