iOS-筛选触摸并将其转发到子视图
我正在构建的应用程序有一个全屏iOS-筛选触摸并将其转发到子视图,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,我正在构建的应用程序有一个全屏MKMapView,另一个UIView子类放在上面,也是全屏的,完全透明的。我想让UIView子类处理单触手势,如轻触和单指拖动,并忽略其他任何操作。这将允许使用其他方式与MKMapView交互,特别是通过禁用3D功能,使用两个手指进行平移/滚动 我这里的问题是MKMapView没有使用touchesXXX:withEvent:方法进行用户交互。因此,我无法在视图和转发到地图的这些方法中检测到触摸计数。同样,无法使用hitTest:withEvent:方法确定哪个视
MKMapView
,另一个UIView
子类放在上面,也是全屏的,完全透明的。我想让UIView
子类处理单触手势,如轻触和单指拖动,并忽略其他任何操作。这将允许使用其他方式与MKMapView
交互,特别是通过禁用3D功能,使用两个手指进行平移/滚动
我这里的问题是MKMapView没有使用touchesXXX:withEvent:
方法进行用户交互。因此,我无法在视图和转发到地图的这些方法中检测到触摸计数。同样,无法使用hitTest:withEvent:
方法确定哪个视图处理触摸,因为那里的UIEvent
对象返回一组空触摸
我曾经考虑过让所有的触摸通过视图向前移动,并使用手势识别器来处理事件,但我确实需要在叠加视图上进行单次触摸/拖动,以对地图视图没有影响
有没有办法根据触摸次数完成过滤?或者在地图视图上禁用单触手势的方法?解决方法其实很简单
- 为地图视图提供一个完全填充的父视图
- 提供配置为仅响应一个手指触摸的父视图平移和点击手势识别器
- 在
上,将MKMapView
属性设置为scrolldenabled
(IB中的“允许滚动”复选框)NO
滚动启用
设置为否
可防止地图视图吞咽平移手势
此处的示例项目:如果将单指点击和拖动识别器连接到地图视图本身,是否有效?因此,基本上通过替换它们来覆盖/取消地图视图上的现有手势?是的。一秒钟后,我在Xcode中看到了这一点。我也试过了,但似乎没有效果。。我也从来没有打过手势(似乎地图视图的识别器先接受了这个手势)。甚至在父视图上设置它们。非常好。我喜欢它,而且它离我很近。这只是引入了一个问题-当您禁用地图的3D功能时,两个手指的手势允许地图视图滚动,这就是我真正想要做的(我想我应该指定我道歉)。现在不幸的是,禁用滚动来吞下单触手势不允许双指平移滚动:(我目前正在沿着这些思路进行测试,以找出一些允许使用手势实现此功能的状态。这必须是可能的。我认为您走的是正确的道路,谢谢!@bgoers:当然。您可以尝试的一件事是通过捕获两个手指平移并计算偏移量来进行滚动。不太确定如何做到这一点。)当然。这是我最后的计划,如果我无法处理转发/取消手势:)@bgoers:看一下
MKMapView
文档的部分。将当前区域转换为矩形,通过平移偏移矩形,将该矩形转换回一个区域,并将其设置为地图区域可能并不难。