我有一个初始化的PageViewController:
self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
在其中一个页面上,有一个UISlider。
我的问题是,当我将过渡样式设置为UIPageViewControllerTransitionStyleScroll
时,在滑块上调用beginTrackingWithTouch
之前需要150-200毫秒。
当我使用UIPageViewControllerTransitionStylePageCurl
时,不会出现此行为,其中UISlider立即被选中。
这意味着除非用户在拖动滑块之前等待一点(视频进度),否则页面将会转向,这远非理想状态。
Page curl动画不符合应用程序的要求,因此我们非常感谢任何解释或解决方法。
答案 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'事情有平移手势注册到它没有做任何事情,但只是为了不传播事件滚动视图。