【发布时间】:2016-07-26 18:24:48
【问题描述】:
我正在尝试将 UIPageViewController 的 UIPanGestureRecognizer 分配给不同的(自定义)视图,以便用于页面切换的平移手势仅适用于屏幕的特定区域。代码基本如下:
let testView = UIView(frame: CGRect(x: 0, y:self.view.frame.height/2, width: 320, height: self.view.frame.height/2))
self.view.addSubview(testView)
for gr in self.pageViewController!.view.subviews[0].gestureRecognizers! {
if gr.isKindOfClass(UIPanGestureRecognizer) {
testView.addGestureRecognizer(gr)
}
}
问题是“下一个”视图控制器在进行平移时不会立即可见,在第一次平移时,当前视图控制器(第一个)似乎是 PageViewController 中唯一的一个,它只是在结束平移之后进行第二次平移以显示下一个视图控制器。
请注意,如果不将 UIPanGesture 分配给不同的视图,PageViewController 将按预期工作,下一个视图控制器自第一次平移后可见。
我为什么要这样做?我需要在 PageViewController 内的视图控制器中添加一个子视图,当用户在它上面做手势时,它不会“平移”PageViewController。 p>
【问题讨论】:
-
出于好奇,您为什么将 UIPanGestureRecognizer 与 UIPageViewController 一起使用?也许这是我的菜鸟问题,但是对于 UIPageViewController,有一些委托方法可以让您翻页或滑动到 UIPageViewController 内的下一个视图。
-
因为我要求 PageViewController 内的视图控制器的子视图在用户交互时不会平移 pageviewcontroller。我正在尝试做的一个例子是苹果的天气应用程序。您可以在其中平移城市之间的 PageViewController,但也可以平移不平移父视图的子视图(您正在查看的城市的当天预测)。 UIPageViewController 委托方法中没有任何内容允许这样做。
-
我明白了,我明白了。给我一秒钟的时间来回答。我要根据天气应用来回答,酷吗?
-
那么为什么不向页面视图控制器添加一个额外的平移手势识别器,然后将您的手势识别器连接到页面视图控制器的手势识别器作为“必须失败”。自从我看到这个已经有一段时间了,但是有一个内置的机制,一个手势识别器在另一个失败之前不会触发。
-
试过了,添加另一个需要 PageViewController 手势识别器失败的手势识别器的问题是手势没有“传递”到下面的视图,所以我无法与之交互带有手势的子视图。