iOS - 过滤触摸并将其转发到 subview

标签 ios objective-c cocoa-touch

我正在构建的应用程序有一个全屏MKMapView,上面放置了另一个UIView子类,也是全屏且完全透明的。我希望 UIView 子类能够处理单点触摸手势,例如点击和单指拖动,并忽略其他任何内容。这将允许 MKMapView 使用其他方式进行交互,特别是通过禁用 3D 功能用两根手指平移/滚动。

我的问题是 MKMapView 不使用 touchesXXX:withEvent: 方法进行用户交互。因此,我无法在 View 上的这些方法中检测到触摸计数并转发到 map 。同样,hitTest:withEvent: 方法不能用于确定哪个 View 处理触摸,因为那里的 UIEvent 对象返回一组空触摸。

我考虑过让所有触摸向前通过 View 并使用手势识别器来处理事件,但我确实需要在覆盖 View 上进行单次触摸/拖动以对 map View 没有影响。

有没有办法根据触摸次数完成这种过滤?或者禁用 map View 上的单点触摸手势的方法?

最佳答案

解决这个问题其实很简单。

  • 为 map View 提供一个完全填充的父 View
  • 将父 View 的平移和点击手势识别器配置为仅响应一根手指触摸
  • MKMapView 上,将 scrollEnabled 属性设置为 NO(IB 中的“允许滚动”复选框)

手势识别器允许您获取手势,将 scrollEnabled 设置为 NO 可防止 MapView 吞下平移手势。

示例项目在这里:https://github.com/Linux-cpp-lisp/sample-no-gesture-mapview

关于iOS - 过滤触摸并将其转发到 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26638325/

相关文章:

iphone - iOS 游戏是如何设置的?

ios - iOS Assets 的 PDF 图像

iphone - 更改标签并添加值

objective-c - 图形风格的 NSDatepicker 按钮

objective-c - 在 TabBarController 中使用导航 Controller 时的标题

ios - 为什么 iOS7 中的 bottomLayoutGuide 和 automaticallyAdjustsScrollViewInsets 没有考虑 UIToolBar 的高度(使用自动布局)

ios - SpriteKit和Swift中SKSpriteNodes的setScale和size有什么区别?

ios - 我还应该将获取的数据存储在我的应用程序本地吗?

ios - 用于签署查询请求的 Amazon Web Services Objective-C SDK

iphone - 获取经度和纬度值