UIPageViewController 滑动和点击之间的不同行为

Posted

技术标签:

【中文标题】UIPageViewController 滑动和点击之间的不同行为【英文标题】:UIPageViewController different behavior between swipe and tap 【发布时间】:2012-02-07 10:29:35 【问题描述】:

我在我的项目中遇到了 UIPageViewController 的奇怪行为。 我实现了viewControllerBeforeViewControllerviewControllerAfterViewController 方法,当我在PageViewController 中滑动手指时它们工作正常。 我还希望在用户点击 PageViewController 的左右区域时翻页,就像在 iBook 上发生的那样。

当用户点击其中一个角时,会调用正确的方法(viewControllerAfterViewControllerviewControllerBeforeViewController),并且当用户在页面之间滑动时,我会返回一个有效的 UIViewController。 不幸的是,在点击手势之后,页面没有翻页,didFinishAnimating 方法也没有被调用。如果在点击后执行滑动手势,页面会随着卷曲动画翻动,但只调用 didFinishAnimating 委托方法。

很奇怪,不是吗? UIPageViewController 似乎已经加载了视图控制器,但在我执行滑动手势之前不会启动动画。

我的问题的一个可能解决方案是检测滑动和点击手势,在委托方法中什么都不做,并通过setViewControllers:direction:animated:completion 翻页。

检测手势对我来说不是问题,因为我已经在我的项目中这样做了,但我想了解为什么 UIPageViewController 会以如此奇怪的方式表现

谢谢!

【问题讨论】:

我找到了解决方案。我实现了gestureRecognizerShouldBegin,我将我的viewcontroller设置为我的PageViewController的TapGestureRecognizer的代表,我总是返回YES。现在我可以使用点击和滑动来浏览页面。 让它成为投票的答案!谢谢你! 【参考方案1】:

这可能是一个相关的问题,但它非常相似,所以也许值得在这里提及。有时在设置 UIPageViewController 时,您会发现点击和滑动的反向手势(上一页)都有效,但向前手势(下一页)滑动有效但点击无效。

这通常是因为没有正确设置嵌套 UIPageViewController 的 UIViewController 的根 UIView 的边界。您需要记住明确设置这些边界,通常是设备的边界。例如在 iPad 上:

self.view = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 768.0, 1024.0)] ;

【讨论】:

为您的问题添加标签,什么版本等会有帮助。

以上是关于UIPageViewController 滑动和点击之间的不同行为的主要内容,如果未能解决你的问题,请参考以下文章

UIPageViewController 动画表示可以滑动

仅在 uiPageViewController 中禁用临时向前滑动

将删除滑动手势从 UIPageViewController 传递给 UITableView

UIPageViewController 取消页面滑动

仅在 UIPageViewController 上的某个方向上禁用用户滑动?

在 UIPageViewController 中获取用户滑动方向