将 UIGesture 转发到后面的视图

2024-02-19

我正在开发 iPhone(iOS 4.0 或更高版本)应用程序,并且在多个视图之间进行触摸处理时遇到一些问题。我有这样的视图结构

---> A superView 
     |
     ---> SubView - A 
     |
     ---> SubView - B (exactly on top of A, completely blocking A).

基本上我有一个超级视图,以及同级子视图 A 和 B。B 与 A 具有相同的框架,因此完全隐藏 A。

现在我的要求是这样的。

  1. 子视图 B 应接收所有滑动和点击(单次和双次) 手势。
  2. 子视图 A 应该接收所有捏合手势。

这就是我向视图添加手势识别器的方法

UISwipeGestureRecognizer *leftSwipe  =  [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(leftSwipe:)];
[leftSwipe setDirection:(UISwipeGestureRecognizerDirectionLeft)];
leftSwipe.delegate  =   self;
[bView addGestureRecognizer:leftSwipe];
[leftSwipe release];

UISwipeGestureRecognizer *rightSwipe  =  [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(rightSwipe:)];
[rightSwipe setDirection:(UISwipeGestureRecognizerDirectionRight)];
rightSwipe.delegate   =   self;
[bView addGestureRecognizer:rightSwipe];
[rightSwipe release];

UIPinchGestureRecognizer *pinch   =  [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(handlePinch:)];
pinch.delegate    =   self;
[aView addGestureRecognizer:pinch];
[pinch release];

我做了一些研究,对我来说UIGestureRecognizerDelegate看起来很有希望,我实现了委托方法

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

我为子视图 B 返回了“否”,希望底层视图能够获取这些事件。但没有这样的运气

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
    if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]] && [gestureRecognizer view] == bView) {
        NSLog(@"pinchGesture");
        //bView.userInteractionEnabled = NO;
        return NO;
    }
    return YES;
}

然后,当识别捏合手势时,我在委托回调内禁用了子视图 B 的用户交互(上面块中的注释代码),希望子视图 A 能够接收到手势的剩余部分。也没有这样的运气。

这就是我现在的立场。我见过this https://stackoverflow.com/questions/6175255/uigesturerecognizer-receive-touch-but-forward-it-to-uicontrol-as-well问题,其中接受的答案涉及财产cancelsTouchesInView。但我相信cancelsTouchesInView只取消特定的触摸事件,不转发它。

还有其他方法可以达到我的要求吗?我已准备好根据您提供的任何提示进行工作。

编辑:赏金时间

我所谓的 subView A 实际上是第 3 方库的 View 类的实例,它取消了所有触摸,并且我无法控制其上的任何手势。我想要左右滑动的不同实现,并且我想要捏合、点击等工作,就像使用第三方视图一样。所以我在 A 之上放置了一个视图(子视图 B)以实现左右滑动。但现在我想将其他手势事件转发到底层库。


如果我正确理解您的问题,您可以添加另一个带有矩形的清晰视图,与您的 A 和 B 视图相同,并在其上实现所有手势:当您执行捏合手势时,控制子视图 A,当滑动和点击时(单次和点击)双)手势 - 控制子视图 B。您可以通过不同的方式做到这一点:通过指针或仅将收到的手势发送到类中的方法,该方法控制您的子视图。

例如:

UISwipeGestureRecognizer *leftSwipe  =  [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(leftSwipe:)];
[leftSwipe setDirection:(UISwipeGestureRecognizerDirectionLeft)];
leftSwipe.delegate  =   subViewAcontroller;
[clearView addGestureRecognizer:leftSwipe];
[leftSwipe release];

UISwipeGestureRecognizer *rightSwipe  =  [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(rightSwipe:)];
[rightSwipe setDirection:(UISwipeGestureRecognizerDirectionRight)];
rightSwipe.delegate   =   subViewAcontroller;
[clearView addGestureRecognizer:rightSwipe];
[rightSwipe release];

UIPinchGestureRecognizer *pinch   =  [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(handlePinch:)];
pinch.delegate    =   subViewBcontroller;
[clearView addGestureRecognizer:pinch];
[pinch release];

or:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
    if ([gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]]) {
        NSLog(@"pinchGesture");
        [subViewBcontroller solvePinchGesture: gestureRecognizer];
    }
//etc
    return YES;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 UIGesture 转发到后面的视图 的相关文章

  • 修补应用内购买黑客;卡在第四步

    正如我们许多人所知 苹果最近出现了一种情况 黑客可以免费获得任何应用内购买 苹果最近发布了这个文件 http developer apple com library ios releasenotes StoreKit IAP Receipt
  • 在 Objective-C 中比较 2 个字符串

    我写了以下代码 if depSelectedIndice gt 1 comSelectedIndice gt 1 NSLog depart elemet d depSelectedIndice NSLog depart elemet d c
  • 从 UIImagePickerController 相机视图推送 viewController

    我正在开发一款消息应用程序 类似于 WhatsApp 用户可以互相发送文本和图像消息 当用户想要发送图像时 他可以从相机胶卷中选择一张图像 也可以用相机拍摄一张图像 这就是我介绍的方式UIImagePickerController对于这两种
  • iPhone 应用程序中的异步、同步、线程

    我正处于一个应用程序的设计阶段 该应用程序将利用 REST Web 服务 并且在使用异步 同步和线程方面遇到了困境 这是场景 假设您有三个选项可供深入研究 每个选项都有自己的基于 REST 的资源 我可以使用同步请求延迟加载每个请求 但这会
  • XCode 无法将 iPhone 应用程序部署到 iPhone 3GS

    因此 我构建了我的 iPhone 应用程序 它在模拟器中运行良好 因此我想将其部署到我的 iPhone 上进行最后一轮测试 然后再使用我的分发配置文件进行公开 Beta 测试 我已经这样做过很多次了 从来没有出现过问题 然而 自从上次测试运
  • 如何将 NSDecimal 值转换为 NSInteger 值?

    我遇到一种情况 我得到一个 NSDecimal 并且我需要一个 NSInteger 我确实知道这是一个非常小的值 这是绝对肯定的 它不会大于 100 所以将它转换为 NSInteger 就完全没问题 不会发生溢出 这怎么可能做到呢 NSDe
  • 在横向中自动调整 UITableCells 内容的大小

    在 UITableView 中 我通过 UILabels 将内容添加到单元格中 定义最佳尺寸 与单元格宽度允许的一样大 我注意到只有tableView contentSize width是可靠的 因为cell contentView bou
  • Parse.com 从相关 PFObject 获取 PFUser

    我正在将照片保存为 PFObject 解析 并使用 PFUser currentUser 用户 ID 作为其键之一 我想在表格视图中显示照片以及该 PFUser 的详细信息 但是当我尝试获取用户时 PFUser user self phot
  • 当地图视图只是屏幕的一部分时,如何在 iOS 模拟器中进行捏合?

    我在 iPad 上有一个视图 我正在添加MKMapView也就是说 全屏高度的一半 然而 当我尝试在 iOS 模拟器上进行捏合时 它不起作用 因为 to nubs 填充了模拟器上的整个 iPad 视图 And so with the map
  • 在 Xcode 5 中重命名 iOS 项目[重复]

    这个问题在这里已经有答案了 我需要重命名一个 iOS 项目 有没有办法在不开始一个全新项目的情况下做到这一点 我发现的所有其他信息都与 Xcode 4 或旧版本相关 这些方法似乎使项目崩溃 我在尝试任何名称更改之前创建了一个快照 在 Xco
  • 在 Swift 中从 UIScrollView 创建 PDF 文件

    我想从 UIScrollView 的内容创建一个 PDF 文件 func createPdfFromView aView UIView saveToDocumentsWithFileName fileName String let pdfD
  • 更改组织以使用 Xcode 9 在 iTunes Connect 上上传二进制文件

    我在 Xcode9 上配置了多个团队 当我尝试将二进制文件上传到 Xcode 9 上的 iTunes Connect 时 没有更改团队的选项 并且出现以下错误 ERROR ITMS 4088 来自苹果开发者论坛的解决方案 1 正常存档2 窗
  • 在 XCode 中链接静态 ObjC 库的过程

    我正在尝试链接到静态库 但不断收到链接器错误 我发现了一些发布示例的网站 但我无法看到我做错了什么 首先 我创建一个链接到我的库的项目 添加 gt 现有文件找到我的 xcodeproj 文件选择 将项目复制到目标组文件夹 选择我的宿主项目作
  • 如何在 React Native 中构造 POST 请求主体,而不是使用字符串化的 json,而是使用 json?

    我正在努力用 React Native 替换一些本机代码 预期的 POST 请求 在AFNetworking in Charles应该是这样的 代码片段 NSError err NSData paramData NSJSONSerializ
  • 如何禁用 iPhone 邮件应用程序中的电话号码链接?

    我的公司正在发送数字电子邮件收据 但遇到了 iPhone Mail 检测数字数据并将其自动链接为电话号码的问题 我已经看到元标记应该可以解决 iPhone 上的 Mobil Safari 中的问题 但该技巧似乎不适用于 Mail 有谁知道如
  • 虚拟乐器 iPhone 应用程序中的 VoiceOver 辅助功能?

    我收到盲人用户的评论 称我的一些声音和音乐相关应用程序只能在关闭 VoiceOver 的情况下使用 在 iOS 设备上启用 VoiceOver 辅助功能后 是否可以启用音乐键盘或鼓垫触摸区域 以便在点击键盘键或虚拟鼓组 等 时可以立即播放音
  • AVAssetExportSession 为零 iPhone 7 - Plus 模拟器

    AVAssetExportSession在 iPhone 6 及以下版本上运行良好 但在 iPhone 7 iPhone 7 Plus 模拟器上运行不佳 Xcode 8 0 这段代码return nil在exportSession中 当在i
  • 在 iOS 中,如何创建一个始终位于所有其他视图控制器之上的按钮?

    无论是否呈现模态或用户执行任何类型的转场 有没有办法让按钮在整个应用程序中 始终位于顶部 而不是屏幕顶部 有什么方法可以让这个按钮可拖动并可捕捉到屏幕上吗 我正在以苹果自己的辅助触摸作为此类按钮的示例 您可以通过创建自己的子类来做到这一点U
  • 如何让按钮闪烁?

    我试图在扫描正确时将按钮的颜色 只是闪烁 闪烁 更改为绿色 在出现问题时将按钮的颜色更改为红色 我可以用这样的视图来做到这一点 func flashBG UIView animateWithDuration 0 7 animations s
  • 如何将 ios7 通用应用程序升级到基于 Xcode 6 的通用故事板应用程序?

    我目前有一个基于 xcode 5 ios 7 的通用应用程序 因此有两个故事板 我正在考虑将其更新到 ios 8 有没有办法 最佳方法将两个故事板迁移到通用的单个故事板 我在 xcode 6 中看不到转换选项 None

随机推荐

  • C# 正则表达式匹配方括号

    我尝试在 C 中使用正则表达式来匹配可以包含以下内容的软件版本号 2 位数字 1 或 2 位数字 不以 0 开头 另一个 1 或 2 位数字 不以 0 开头 1 2 3 4 或 5 位数字 不以 0 开头 末尾有一个选项字母 括在方括号中
  • 将设计身份验证合并到现有的用户结构中?

    我有一个功能齐全的身份验证系统 其中的用户表有超过五十列 它很简单 但它使用盐进行哈希加密 使用电子邮件而不是用户名 并且还有两种不同类型的用户和管理员 我希望将 Devise 身份验证合并到我的应用程序中 以增强额外的部分 例如电子邮件验
  • gcc 如何在特定平台上获得每种类型的对齐方式?

    它是硬编码到 gcc 的源代码中还是以编程方式获取 我认为它是硬编码在特定于 arch 的文件夹中的 例如对于sparc http www google com codesearch Yj7Hz1ZInUg trunk gcc 4 2 1
  • C:修改文件以从外部文件读取

    我正在努力通过C 编程语言 第二版 尝试通过例子进行推理 我对 C 是个新手 第一章中的大部分示例代码依赖于getchar 接收输入 例如 以下代码返回文本块的最长行 include
  • 我将如何实现不同速度的秒表?

    理想情况下 我想要类似的东西跑表 http msdn microsoft com en us library system diagnostics stopwatch aspx类 但有一个额外的属性称为Speed这将决定计时器改变分钟的速度
  • 为什么flask sqlalchemy模型查询没有得到最新记录?

    我有一个模型类 class PlatformUsage db Model tablename platform usage id db Column db BigInteger primary key True module db Colu
  • div内的表格溢出

    我有一个非常基本的 CSS 问题 我有一个高度固定的 div 并且该 div 内有一个表格 除非 div 具有滚动条 否则表格的内容将无法容纳在 div 中 现在的问题是 表格的内容溢出了 div 因为它的高度超过了我在 div 上设置的高
  • Jenkins 中的 pipelinev shell 返回问题 termios.error: (25, 'In合适的 ioctl for device')

    我的 Jenkins 有一个问题 当我运行作业时 Jenkins 遵循以下步骤 1 pipenv install r requirements txt 2 pipenv shell 在这一步出现了这个错误 pipenv shell 17 2
  • json_encode() 中的编码

    包含 或其他特殊字符的字符串怎么会返回 null 不仅保留特殊字符 而且整个字符串 值 都返回为 null EDIT class JSON static function encode arr utf8 encode false arr s
  • 获取 href onclick 并使用链接重定向

    我正在尝试执行以下代码 通过单击特定的 a 标签从一个页面重定向到另一页面 并附加 clk 变量中的特定链接 function abc var a document getElementsByTagName a alert a for va
  • AndEngine:处理与 TMX 对象的碰撞

    我现在设法加载 tmx 地图 我想创建精灵无法移动的障碍 我像这样恢复了障碍 try final TMXLoader tmxLoader new TMXLoader this this mEngine getTextureManager T
  • JSON 模式 oneOf 属性已填充

    如何设置 JSON 架构规则来表明必须设置并且是必需的属性之一 我尝试了各种方法来解决它 例如 id required true additionalProperties true type object properties surnam
  • 使用 MediaMuxer 创建的不可流式传输的视频文件

    我在用MediaCodec对视频进行编码 帧通过相机预览回调传入MediaCodec实例 未使用 Surface 我在用JCodec https github com jcodec jcodec用于混合的库 我能够流式传输生成的视频 视频播
  • C# 中“枚举数”的定义

    C 中枚举数的含义是什么 枚举器可帮助您枚举 迭代 项目集合 您只需查看即可推断出目的IEnumerator 接口的成员 https msdn microsoft com en us library 78dfe2yb aspx 更具体地说
  • 在 zxing 片段库中打开/关闭手电筒

    我在我的应用程序中实现了 Zxing 条码扫描库 我使用过以下库 https code google com p barcodefraglibv2 https code google com p barcodefraglibv2 我想在扫描
  • 从放置在列表视图中的 edittext 获取数据

    我使用 Holder 创建了一个包含 textview 和 edittext 的列表 它看起来像 Textview Edittext Textview Edittext Textview Edittext 但我无法从每个 Edittext
  • 是否可以使用 Ruby 将一系列 PDF 合并为一个?

    我有一系列按顺序命名的 PDF 如下所示 01 foo pdf 02 bar pdf 03 baz pdf etc 使用 Ruby 是否可以将它们组合成一个大的 PDF 同时保持它们的顺序 我不介意安装任何必要的宝石来完成这项工作 如果这在
  • 从 URL 获取文件名

    在Java中 给定一个java net URL or a String形式为http www example com some path to a file xml 获取文件名 减去扩展名 的最简单方法是什么 所以 在这个例子中 我正在寻找
  • Rust 比赛的早期突破

    我想切换多种可能的情况x有一种情况 这里x 0 我想检查一些附加代码的结果以确定下一步要做什么 一种可能性是提前结束比赛 I d use break在 C 中执行此提前返回操作 但这在 Rust 中是不允许的 return从父函数返回 在本
  • 将 UIGesture 转发到后面的视图

    我正在开发 iPhone iOS 4 0 或更高版本 应用程序 并且在多个视图之间进行触摸处理时遇到一些问题 我有这样的视图结构 gt A superView gt SubView A gt SubView B exactly on top