我正在尝试一个快速原型项目,看看我想用 Mapbox iOS SDK (route-me) 和 iOS MapKit 做什么是可能的。
我想看看我是否可以通过 MapBox 的离线功能(以及集群等附加功能)获得两全其美,但也仍然使用 iOS 地图类型。经过一些研究(和对 SO 的帮助),我发现 Mapbox 和 iOS 地图不能一起工作,你可以选择其中一个。我开始怀疑如果我在 iOS 地图上放置一个 RMMapView(地图框地图)目录会发生什么。然后在我想查看 iOS 地图的情况下,我可以将 RMMapViews 底图设置为透明,这样直接位于其下方的 iOS 地图就会显示出来。同样,如果需要,您可以使用 iOS 地图,但我也可以保持绘制地图框标记,这样当您切换到 iOS 地图时,您不需要重新绘制标记。
基本上,我创建了一个主视图(超级视图)并添加了两个子视图(MKMapView 和 RMMapView),RMMapView 位于顶部。我已经想出了如何使 RMMapView 上的基础层透明,我什至可以添加 RMMarkers,它们很好地显示在 MKMapView 之上。
我的问题是触摸事件和手势。如果我这样做,我需要发生在 RMMapView 上的所有触摸和手势,仍然发生在 RMMapView 上,但也发生在 MKMapView 上。IE 如果 RMMapView 上的基本地图是透明的,但该视图中有一个标记,当我滚动地图时,我需要 RMMapView 与 MKMapView 一起移动(以便标记移动)。
我试过的:
- 覆盖 hitTest。这种方法的问题是,一旦你这样做,触摸只会在你返回的视图上操作。我需要在 RMMapView 和 MKMapView 上进行触摸。
- 在我的超级视图中创建了一个手势识别器。然后,我尝试将这些内容传递给我的两个子视图。真的,真的,虽然这可能有效。但据我所知,有几个问题。首先,我知道两个地图视图顶部都有滚动视图,因此将触摸转发到 MKMapView 和 RMMapView 不起作用。我想我必须将触摸转发到每个地图滚动视图。
所以我不认为 1 会工作,我不能让 2 工作。任何人都曾试图做这样的事情。2个不同的视图可以作用于相同的触摸事件还是获得事件的第一个视图获胜?
我的设计也可能是错误的,所以如果有人有其他建议,请把它扔掉。确实意识到我想远离修改 RMMapView,并且不能真正修改 MKMapView。
我能找到的最相关的帖子是:如何拦截 MKMapView 或 UIWebView 对象上的触摸事件?. 但我不想拦截 MKMapView 上的事件,我想在 SuperView 上拦截它们,这样我就可以传递给它的两个 sup 视图。
谢谢