我在 Xcode 4 中为 iPad iOS5 创建了一个基于页面的应用程序。
当我运行应用程序时,我可以看到书中的页面并可以前后翻页, 通过点击屏幕或从左向右或从右向左移动手指。
我的问题是,无论我在屏幕中的哪个位置、边框中按下,页面都会翻动。
我已经成功地用这段代码取消了手指的翻转:
for (UIGestureRecognizer *gR in self.pageViewController.gestureRecognizers)
{
if ([gR isKindOfClass:[UIPanGestureRecognizer class]])
{
[[gR view] removeGestureRecognizer:gR];
}
}
如何在屏幕上定义一个特定区域,当我点击它时,只有它,页面才会翻动?
我问这个是因为我将工具栏放在屏幕底部,当我单击工具栏中的按钮时,页面会翻转。我想在屏幕上放置 2 个箭头,只有当我按下它们时页面才会翻转。
对不起,如果我的解释有点生疏。谢谢大家。
最佳答案
Cipramill 的回答是正确的——这里有更多详细信息。
IOS 文档建议添加新的 View 来描绘您希望翻页手势处于事件状态的区域,但这种方法要简单得多。将代码添加到 Xcode 4 在 MQ1RootViewController.h 和 MQ1RootViewController.m 中设置的默认模板:
更改 MQ1RootViewController.h 中的接口(interface)行:
@interface MQ1RootViewController : UIViewController <UIPageViewControllerDelegate,
UIGestureRecognizerDelegate>
将此代码添加到 MQ1RootViewController.m 中 viewDidLoad 的最底部:
for (UIGestureRecognizer *gR in self.pageViewController.gestureRecognizers) {
gR.delegate = self;
}
将此方法添加到 MQ1RootViewController.m:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldReceiveTouch:(UITouch *)touch
{
if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]
|| [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
CGPoint point = [touch locationInView:self.view];
if(point.x < 100 || point.x > 924) return YES;
}
return NO;
}
请注意,“滑动”手势实际上源自页面 View Controller 对象的“平移”手势。
以上将手势限制在屏幕的左右边缘。这允许使用手势与屏幕中央的对象进行交互,而不会因错误的滑动而意外更改页面。
关于ios - 基于页面的应用程序和手势识别器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9020251/