我有UIPageViewController
来处理我的“书”的翻页。但是,每个图书页面都是ViewController
,UIScrollView
为subview
。由于UIScrollView
,contentSize
只能垂直滚动。问题是,当用户垂直滚动scrollview
时,由于scrollview
仍在滚动/减速,用户无法翻页。一种非常简单的方法是滚动页面,然后尝试点击视图的边缘。这通常会更改页面,并且在scrollview
未移动时确实会更改页面。但是,当它移动时,水龙头会使滚动视图停止移动而不是翻页。
如果scrollviews
尝试使用手势通过点击或平移页面来翻页来导致翻页动画,如何取消UIPageViewController
手势?
有关我想要实现的行为的示例,请查看iPhone上的Twitter官方客户端。 当Feed仍然从滚动减速时,可以从时间轴滑动到发现。
答案 0 :(得分:1)
UIScrollView
滚动事件将阻止其他UIView
动画,因此在Twitter的情况下,他们可能会在滑动视图之前一瞬间取消滚动。正如你在问题中提到的那样:
“如果UIPageViewController尝试使用手势通过点击或平移页面来翻页以导致翻页动画,如何取消滚动视图手势?”
我会建议一个解决方法。
不要依赖UIPageViewController
的固有UIPanGestureRecognizer
,而是在页面视图中包含您自己的UIPanGestureRecognizer
,以便在页面的相应部分中检测到平移并执行在适当的方向上,新的UIPanGestureRecognizer
会覆盖UIPageViewController
的{{1}}并触发必要的操作。具体来说,您需要:
(1)使用
暂停滚动动画UIGestureRecognizer
(2)使用
以编程方式翻页CGPoint offset = scrollView.contentOffset;
[scrollView setContentOffset:offset animated:NO];
以便停止滚动动画并在一个流体平移手势内完成翻页。
答案 1 :(得分:0)
UIGestureRecognizer
类可以使用requireGestureRecognizerToFail:方法设置对其他手势识别器的依赖关系。
在您的情况下,可以使用此方法:
for (UIGestureRecognizer *gestureRecognizer in pageController.gestureRecognizers) {
for (ViewController *viewController in viewControllers) {
for (UIGestureRecognizer *gestureRecognizerForFail in viewController.scrollView.gestureRecognizers) {
[gestureRecognizerForFail requireGestureRecognizerToFail:gestureRecognizer];
}
}
}
答案 2 :(得分:-1)
我有同样的问题,我一直在努力...在我的情况下,我有pdf启用缩放。所以我举个例子:
[scrollView setMaximumZoomScale:6];
[scrollView setMinimumZoomScale:1];
当我初始化控制器及其scrollView时,就在此之后,每次我改变方向或页面时,我都会改变缩放以适应页面的宽度,只有当缩放是“远离”
时CGFloat desiredWidth = scrollView.frame.size.width/pdfRect.size.width;
if (desiredWidth>[self zoomScale]) {
[scrollView setZoomScale:desiredWidth animated:YES];
}
我希望它有所帮助