设置手势委托时无法选择地图对象

Posted

技术标签:

【中文标题】设置手势委托时无法选择地图对象【英文标题】:Unable to select a map object when Gesture delegate set 【发布时间】:2015-04-15 06:19:24 【问题描述】:

这是一个与 HERE iOS HybridPlus SDK 相关的问题。

如果与 NMAMapViewNMAMapViewDelegateNMAMapGestureDelegate 类的 mapView 进行了任何交互,则都设置了 NMAMapGestureDelegate 的方法。

例如:

如果点击地图上的对象,则- mapView:didReceiveTapAtLocation: 会被调用,- mapView:didSelectObjects: 不会被调用!

而在 android 中并非如此。在 android 中,如果一个对象被点击并设置了两个委托,那么上面提到的两个方法都会被调用。

问题:iOS 中有什么解决方案?

【问题讨论】:

【参考方案1】:

HERE 开发支持获得了这个答案。

mapView:didSelectObjects: 没有被调用,因为它们 通过实现覆盖默认的点击处理程序 mapView:didReceiveTapAtLocation 在他们的 NMAMapGestureDelegate 中。 因为这是一个协议,他们不能调用 mapView:didReceiveTapAtLocation 的超类运行 默认实现,在他们执行他们需要的操作之后。 然而,传递给 mapView:didSelectObjects: 的对象在 一种标准方式,可供客户使用,因此他们可以 模仿默认实现,例如:

- (void)mapView:(NMAMapView *)mapView didReceiveTapAtLocation:(CGPoint)location  

    NSLog(@"didReceiveTapAtLocation: %fx%f", location.x, location.y); 
    if ([mapView.delegate respondsToSelector:@selector(mapView:didSelectObjects:)])  
        // Check to see if any objects are selected 
        NSArray *selectedObjects = [mapView visibleObjectsAtPoint:location]; 
        // If any objects were selected, treat the tap as a selection 
        if (selectedObjects.count > 0)  
            [mapView.delegate mapView:mapView didSelectObjects:selectedObjects]; 
         
     

【讨论】:

以上是关于设置手势委托时无法选择地图对象的主要内容,如果未能解决你的问题,请参考以下文章

通过委托为另一个类中的手势识别器调用选择器

Swift:手势识别器无法识别的选择器发送到实例

同时使用委托,但仍然有一个手势覆盖其他手势

Android仿微信地图定位和位置选择(下)

h5使用高德地图手动拖动地图选择位置

以编程方式添加视图和手势 - “发送到实例的无法识别的选择器”