将 UIPageViewController(带有 TransitionStyleScroll)平移手势限制到某个区域
Posted
技术标签:
【中文标题】将 UIPageViewController(带有 TransitionStyleScroll)平移手势限制到某个区域【英文标题】:Restrict UIPageViewController (with TransitionStyleScroll) pan gesture to a certain area 【发布时间】:2014-01-30 16:20:35 【问题描述】:在我的应用程序中,我有一个 RootPageViewController,其中包含 UIPageViewController 和一个或多个 DetailPageViewController,其中 UITableView 作为子视图。
DetailPageViewController
/
RootPageViewController - DetailPageViewController
\
DetailPageViewController
每个 DetailPageViewController 的顶部都有一个小空间,应该可以在其中滑动并到达下一个 DetailPageViewController。
-------------------
| |
| | -> UIPageViewController should respond to pan's
| |
|-------------------| --------------------------------------------
| CellContent |
|-------------------|
| CellContent |
|-------------------| -> UIPageViewController should disable UIPageViewController pan's
| CellContent |
|-------------------|
| ... |
在 ios 7 天气应用程序中,有一个滚动视图,带有整个弱预测,它以某种方式覆盖或禁用 UIPageViewController 的平移。
我怎样才能重现这种行为?
抱歉,缺少截图
【问题讨论】:
【参考方案1】:我通过子类化 UIPageViewController,找到它的 UIScrollView(迭代 self.subviews),并向该滚动视图添加一个新的 UIPanGestureRecognizer 来做到这一点。
我将我的子类 UIPageViewController 设置为新的 UIPanGestureRegognizer 的代表。然后我实现了两个委托方法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
return NO;
在
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
我决定是要“吃掉这个事件”(回复是)还是要 UIScrollView 的原始 UIPanGestureViewRecognizer 来处理它(回复否)。所以,YES-reply 意味着 UIPageViewController 不会滚动到下一个 ViewController。
【讨论】:
lukaszielinski.de/blog/posts/2014/03/26/… 这里有很多详细的答案,说的是同样的事情 谢谢你们两个:) 好了,不需要额外添加 panGestureRecognizer!您可以与提供的行为相同,而不必执行所有这些gestureRecognizershouldRecognizeSimultaneouslyWithGestureRecognizer: business... ;-)【参考方案2】:我在 Swift 中的解决方案:
let myview = UIView(frame: CGRect(x:0, y:0, width:320, height:320))
//dummy view that defines the area where the gesture works
self.view.addSubview(myview)
for x in self.pageViewController!.view.subviews
if x is UIScrollView
myview.addGestureRecognizer(x.panGestureRecognizer)
【讨论】:
以上是关于将 UIPageViewController(带有 TransitionStyleScroll)平移手势限制到某个区域的主要内容,如果未能解决你的问题,请参考以下文章
带有PageControl的UIPageViewController
带有 Peeking 的 UIPageViewController
带有 PageControl 的 UIPageViewController