我正在使用 aUIPageViewController
滚动浏览一些视图控制器。但是,我需要关闭UIPageViewController
视图控制器数组的开头和结尾,即,如果在滚动页面视图控制器时,如果我们已经到达视图控制器数组的边界,则关闭视图控制器。
对于解雇,我正在使用UIPanGestureRecognizer
被调用的dismissPanGestureRecognizer
. 当 UIPageViewController 的过渡样式为UIPageViewControllerTransitionStylePageCurl
. 在那种情况下,我可以像这样连接我的手势-
在viewDidLoad
:
[pageViewController.gestureRecognizers enumerateObjectsUsingBlock:^(UIGestureRecognizer *gR, NSUInteger idx, BOOL *stop){
gR.delegate = self;
[dismissPanGestureRecognizer requireGestureRecognizerToFail:gR];
}];
self.view.gestureRecognizers = self.pageViewController.gestureRecognizers;
对于UIGestureRecognizerDelegate
方法,它是这样的 -
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
// If we are at the left boundary and this is a pan gesture going right-left,
// return NO
// Else If we are at the right boundary and this is a pan gesture going left-right,
// return NO
// Else return YES
}
到目前为止,一切都很好。如果它是平移手势,我们仅在页面视图控制器手势对它不感兴趣时才使用它来关闭。
当过渡样式为UIPageViewControllerTransitionStyleScroll
. 在这种情况下,UIPageViewController
没有任何手势识别器。看起来它是使用一个内部视图(pageViewController.view.subviews)实现的UIQueuingScrollView
,我不想乱用它。发生的情况是,在滚动转换类型中,在视图控制器的边界处,滚动视图只是弹跳,并且平移手势识别器永远不会因解雇而被触发。我曾尝试将bounces
UIQueuingScrollView 的属性设置为 NO,然后页面甚至没有改变。
UIView
接下来,我尝试在视图顶部添加一个透明的UIPageViewController
,然后hitTest:withEvent:
在其上实现,我认为只有当它不在边界时,我才会将事件转发到 pageViewController。但是,虽然它确实对何时允许页面翻转提供了一定程度的控制,但它也会阻止其他手势传递给 pageController 视图(如点击按钮等)。
当我到达 UIPageViewController 的边界(UIPageViewControllerDataSource 方法返回nil
)时,当转换样式为UIPageViewControllerTransitionStyleScroll
.
我目前正在 iOS6/iOS7 上进行测试。