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

标签 ios uigesturerecognizer uipageviewcontroller

我在 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/

相关文章:

iphone - iOS 本地播放音乐列表

ios - 在 Swift 中可靠地获取 iOS 应用程序的 “~/Library” 路径

objective-c - 显示 View 时 iOS 背景变暗

ios - 将触摸事件从 UIScrollview 传递到 UICollectionView

ios - 单个 View 的多个手势响应器

ios - 防止 UISplitViewController 在详细 View 中单击时关闭主选项卡?

ios - 如何在 iOS 中自动滚动页面 View Controller ?

ios - EMBEDDED_CONTENT_CONTAINS_SWIFT -- pod 安装后出错

ios - 防止 UIPageViewController 的滑动影响 UISlider

ios - 禁用和启用页面滚动(Swift)