基于页面的应用程序和手势识别器

时间:2012-01-26 15:11:39

标签: ios uigesturerecognizer uipageviewcontroller

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

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

我的问题是,无论我在屏幕上按什么,在边框中,页面都会转动。

我设法用这个代码用手指取消翻转:

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

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

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

很抱歉,如果我的解释有点生疏了。谢谢大家。

2 个答案:

答案 0 :(得分:4)

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

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

更改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;
}

请注意,“滑动”手势实际上是由页面视图控制器对象从“平移”手势派生的。

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

答案 1 :(得分:2)

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

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

- 设置根视图控制器以实现UIGestureRecognizerDelegate

- 在RootViewControllers ViewDidLoad中获取pageVC的所有手势识别器:

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

希望这有帮助

相关问题