我想使用 UISlider
控件来管理 UIPageViewController
分页 . 我已经设法获取页数,这些是滑块用于分页的值.2999093_分页 .
现在,它正在发挥作用 . 当我如此快速地改变 Value 时,问题出现了 . 任何人都知道如何解决这一点?
- (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 回答
您可以通过应用以下帖子中的一种技术,在滑块结束滑动时更新pageControl:iPhone : How to detect the end of slider drag?
滑动时不断改变 Value 对于这种操作来说风险太大 . 如果你真的出于某种原因要求不断更新页面,你将不得不提出一些妥协,这需要一些努力 . 第一眼看,我提出了这个策略:
添加一些BOOL属性,让's call it ' isPresenting'并将其初始设置为NO .
如果isPresenting为NO,则启动提示视图
on sliderValueChange .
将属性'isPresenting'设置为YES .
当每个视图完成呈现时,将isPresenting设置为NO .
检查滑块是否滑动,如果不是手动调用
changeValueSlider:
注意:步骤4和5.应该从子视图(
viewDidAppear:
)执行,因此您应该使用协议或本地通知来执行此操作,或者在子级中引用父视图控制器并从子级调用父级方法 .