2016-03-08 68 views
0

我想使用UISlider控件来管理UIPageViewController分页。我已经掌握了获取页面的数量,这些是滑动条用于scroll分页的值。UISlider管理UIPageViewController分页

现在,它正在工作。当我更改这个值时,问题就来了。任何人都知道我该如何解决这一问题?

- (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]; 
} 
+0

问题是什么?会发生什么 – zcui93

回答

2

你只能当滑块收盘应用的技术之一从以下后滑动或者更新的PageControl:iPhone : How to detect the end of slider drag?

更改值汽车无滑动时只是风险太大了这种操作。如果您出于某种原因需要不断更新页面,则必须提出一些折衷方案,并且需要一些努力。 在第一次看,我想出了这个策略:

  1. 添加一些BOOL财产,姑且称之为“isPresenting”,它最初被设置为NO。
  2. 对sliderValueChange,如果isPresenting为NO,则开始呈现视图。
  3. 将属性'isPresenting'设置为YES。
  4. 当每个视图完成呈现自身时,将isPresenting设置为NO。
  5. 检查,如果滑块滑动,如果不叫changeValueSlider:手动

注:步骤4和5应该从孩子的意见(viewDidAppear:)执行,因此,你应该使用协议或本地通知要做到这一点,或者在子节点中引用父视图控制器并从子节点调用父节点的方法。

+0

我也差不多。问题来了,当我调用这个方法'[self.pageViewController setViewControllers:@ [previewViewController]方向:UIPageViewControllerNavigationDirectionReverse动画:YES完成:NULL]; }'在很短的时间内很多次,它会变得很疯狂 – croigsalvador

+0

这就是我的答案的重点,你应该防止它被频繁地调用,这就是'isPresenting'propery的用途。你可以在viewViewController的viewDidAppear中将isPresenting设置为NO,并且只有当isPresenting是NO –

+0

mmm时,才会开始新的转换,好的,我会试一试。对不起,我不明白 – croigsalvador