UISlider管理UIPageViewController分页

时间:2016-03-08 13:25:20

标签: ios iphone uipageviewcontroller uislider

我想使用UISlider控件来管理UIPageViewController分页。我已设法获取页数,这些是滑块用于scroll分页的值。

现在,它正在发挥作用。当我如此快速地改变价值时,问题出现了。任何人都知道如何解决这一点?

- (void)changeValueSlider:(UISlider *)slider {
   [self goToPageAtIndex:slider.value];
}

- (void)goToPageAtIndex:(NSUInteger)index {
    MNBBasePreviewViewController *currentViewController = self.pageViewController.viewControllers.firstObject;
    if (index < self.previewContainerInteractor.count){
        if (index < currentViewController.index) {
            [self backToPageAtIndex:index];
        } else if (index > currentViewController.index) {
            [self forwardToPageAtIndex:index];
        }
    }
}

- (void)forwardToPageAtIndex:(NSUInteger)index {
    MNBBasePreviewViewController *previewViewController = [self viewControllerAtIndex:index];
    [self.pageViewController setViewControllers:@[previewViewController] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
}

- (void)backToPageAtIndex:(NSUInteger)index {
    MNBBasePreviewViewController *previewViewController = [self viewControllerAtIndex:index];
    [self.pageViewController setViewControllers:@[previewViewController] direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:NULL];
}

1 个答案:

答案 0 :(得分:2)

您可以通过应用以下帖子中的一种技术,在滑块结束滑动时更新pageControl:iPhone : How to detect the end of slider drag?

滑动时不断改变价值对于这种操作来说风险太大。如果你真的出于某种原因要求不断更新页面,你将不得不提出一些妥协,这需要一些努力。 第一眼看,我提出了这个策略:

  1. 添加一些BOOL属性,让我们称之为'isPresenting&#39;并且最初将其设置为NO。
  2. on sliderValueChange,如果isPresenting为NO,则开始显示视图。
  3. 设置属性&#39; isPresenting&#39;是的。
  4. 当每个视图完成呈现时,将isPresenting设置为NO。
  5. 检查滑块是否滑动,如果不是手动调用changeValueSlider:
  6. 注意:步骤4.和5.应该从子视图(viewDidAppear:)执行,因此您应该使用协议或本地通知来执行此操作,或者在子项中引用父视图控制器并调用来自孩子的父母方法。