4

我在 Xcode 4 中为 iPad iOS5 创建了一个基于页面的应用程序。

当我运行应用程序时,我可以看到书中的页面,并且可以通过点击屏幕或从左到右或从右到左移动手指来前后翻转它们。

我的问题是,无论我在屏幕的哪个位置按下,在边框中,页面都会翻转。

我设法用以下代码取消了手指翻转:

for (UIGestureRecognizer *gR in self.pageViewController.gestureRecognizers) 
{
    if ([gR isKindOfClass:[UIPanGestureRecognizer class]]) 
    {
        [[gR view] removeGestureRecognizer:gR];
    }
}

如何在屏幕上定义一个特定区域,当我点击它时,只有它才会翻页?

我问这个是因为我将工具栏放在屏幕底部,当我单击工具栏中的按钮时,页面会翻转。我想在屏幕上放两个箭头,只有当我按下它们时页面才会翻转。

对不起,如果我的解释有点生疏。谢谢你们。

4

2 回答 2

4

Cipramill 的回答是正确的——这里有更多细节。

IOS 文档建议添加新视图来描绘您希望翻页手势处于活动状态的区域,但这种方法要简单得多。将代码添加到 Xcode 4 在 MQ1RootViewController.h 和 MQ1RootViewController.m 中设置的默认模板:

更改 MQ1RootViewController.h 中的接口行:

@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;
}

请注意,“滑动”手势实际上源自页面视图控制器对象的“平移”手势。

以上将手势限制在屏幕的左右边缘。这允许使用手势与屏幕中心的对象进行交互,而不会因错误的滑动​​而意外更改页面。

于 2012-06-26T05:46:07.687 回答
2

您可以连接到手势系统并定义接受触摸的区域。

在这个解释中,我假设您的 RootViewController 有UIPageViewController一个子 VC:

- 设置你的根视图控制器来实现UIGestureRecognizerDelegate

- 接管 RootViewControllers 中 pageVC 的所有手势识别器ViewDidLoad

for (UIGestureRecognizer *gR in self.pageVC.gestureRecognizers) {
    gR.delegate = self;
}

- 最后在您的 RootViewController 中实现手势识别器并定义您要忽略的区域:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
 if ([gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) { 
     CGPoint point = [touch locationInView:self.view];

     //Examine point and return NO, if gesture should be ignored.

   }
   return YES;
}

希望这可以帮助

于 2012-01-26T20:45:05.700 回答