UIPageViewController里面的UISlider

时间:2013-06-19 07:15:04

标签: cocoa-touch uislider uipageviewcontroller

我有一个初始化的PageViewController:

self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
                          navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];

在其中一个页面上,有一个UISlider。

我的问题是,当我将过渡样式设置为UIPageViewControllerTransitionStyleScroll时,在滑块上调用beginTrackingWithTouch之前需要150-200毫秒。 当我使用UIPageViewControllerTransitionStylePageCurl时,不会出现此行为,其中UISlider立即被选中。

这意味着除非用户在拖动滑块之前等待一点(视频进度),否则页面将会转向,这远非理想状态。

Page curl动画不符合应用程序的要求,因此我们非常感谢任何解释或解决方法。

4 个答案:

答案 0 :(得分:19)

由于UIPageViewControllerTransitionStyleScroll手势识别器不可用,您可以使用:

for (UIView *view in pageViewController.view.subviews) {
    if ([view isKindOfClass:[UIScrollView class]]) {
        UIScrollView *scrollView = (UIScrollView *)view;
        scrollView.delaysContentTouches = NO;
    }
}

答案 1 :(得分:1)

我通过在UISlider上添加一个平移手势并设置:

解决了这个问题
self.sliderGesture.cancelsTouchesInView = NO;  // make touch always triggered

并实现委托方法,如:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return otherGestureRecognizer.view.superview == self.parentViewController.view;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    // only receive touch in slider
    CGPoint touchLocation = [touch locationInView:self.view];
    return CGRectContainsPoint(self.slider.frame, touchLocation);
}

答案 2 :(得分:0)

您可以尝试将页面视图控制器手势的委托设置为根视图控制器:

for (UIGestureRecognizer* gestureRecognizer in self.pageViewController.gestureRecognizers) {
    gestureRecognizer.delegate = self;
}

如果手势出现在UIClider的子类中,则阻止触摸手势:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    return ([touch.view isKindOfClass:[UIControl class]] == NO); 
}

答案 3 :(得分:0)

帮助我的是为UIView添加了pan-gesture-recognition来保存UISlider,所以最后我有 UIPageViewController-> UIScrollView-> ...-> MyView-> UISlider ' MyView'事情有平移手势注册到它没有做任何事情,但只是为了不传播事件滚动视图。