您可以覆盖
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldReceiveTouch:(UITouch *)touch
为了更好地控制 PageViewController 何时接收触摸事件,可以查看“防止手势识别器分析触摸事件”中的内容。请参考Dev API Gesture Recognizers。
在 RootViewController 中,我的解决方案如下:
在 viewDidLoad 中:
for (UIGestureRecognizer *gR in self.view.gestureRecognizers) {
gR.delegate = self;
}
覆盖:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) {
CGPoint touchPoint = [touch locationInView:self.view];
if (touchPoint.y > 40) {
return NO;
}
else if (touchPoint.x > 50 && touchPoint.x < 430) {
return NO;
}
}
return YES;
}
别忘了将RootViewController设置为UIGestureRecognizerDelegate。
(顺便说一句,我只处于横屏模式。)
编辑 - 上面的代码转换成Swift 2:
在viewDidLoad中:
for gr in self.view.gestureRecognizers! {
gr.delegate = self
}
使页面视图控制器继承 UIGestureRecognizerDelegate
,然后添加:
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
if let _ = gestureRecognizer as? UITapGestureRecognizer {
let touchPoint = touch .locationInView(self.view)
if (touchPoint.y > 40 ){
return false
}else{
return true
}
}
return true
}
NSArray *viewControllers = [NSArray arrayWithObject:pageIWantToTurnTo];
然后[pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
- Rich86man