13

我有一个像这样初始化的 PageViewController:

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

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

我的问题是,当我将 transitionstyle 设置为 时,在滑块上调用UIPageViewControllerTransitionStyleScroll之前需要 150-200 毫秒。beginTrackingWithTouch当我使用 UISlider 时,看不到这种行为UIPageViewControllerTransitionStylePageCurl,其中 UISlider 立即被选中。

这意味着,除非用户在拖动滑块(视频进度)之前稍等片刻,否则页面将改为翻转,这远非理想。

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

4

4 回答 4

22

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

for (UIView *view in pageViewController.view.subviews) {
    if ([view isKindOfClass:[UIScrollView class]]) {
        UIScrollView *scrollView = (UIScrollView *)view;
        scrollView.delaysContentTouches = NO;
    }
}
于 2013-07-25T13:41:00.050 回答
2

我通过在 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);
}
于 2016-06-18T10:37:11.113 回答
0

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

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

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

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    return ([touch.view isKindOfClass:[UIControl class]] == NO); 
}
于 2013-06-20T10:10:49.530 回答
0

对我有帮助的是将 pan-gesture-recognizer 添加到包含 UISlider 的 UIView,所以最后我有 UIPageViewController->UIScrollView->...->MyView->UISlider 'MyView' 的东西已经注册了平移手势什么也没做,只是为了不将事件传播到滚动视图。

于 2016-06-20T13:18:51.147 回答