iOS 【关于百度地图大头针标记 选中状态/点击状态 的区别及处理办法】

在项目中遇到这样一个需求,在点击区域选择按钮的时候会显示当前的 区域范围(BMKPolylineView) 以及 行政区域中心(大头针),并且大头针要显示出气泡展示当前区域车辆信息。如图:



细心的朋友可能发现,地图的中心应该是该区域的地理中心,而非我们获取到的行政中心。但是问题在于我们在弹出行政中心(绿色大头针)的泡泡时,是调用了:

// 选定大头针,弹出车辆数目
[self.mapView selectAnnotation:_scopePoint animated:NO];

而这句话的作用有二:① 显示泡泡(使大头针变为选中状态) ② 点击该大头针(使大头针变为点击状态)

但是大头针一旦成为了点击状态,那么就默认使该点击的大头针作为当前地图的中心点,显然这不是我们想要的。

为了让大头针选中弹出泡泡,并且不会让地图的中心点移动到该大头针的位置,我们做如下处理:

在大头针 BMKAnnotationView 初始化的代理方法中将该大头针的 view 的触摸事件取消。

/**
 *根据anntation生成对应的View
 *@param mapView 地图View
 *@param annotation 指定的标注
 *@return 生成的标注View
 */
- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation;

annotationView.enabled = NO;

因为大头针的触摸事件和大头针是否显示弹窗是两个事件,所以彼此互不影响。


又出现了一个新的情况,那就是在不断切换区域的时候,会重新定位到行政区域中心的位置,然后再跳转到地理区域中心的位置。这样一来,界面会卡顿,定位两次的效果也不是很美观。我们仍旧可以在上面的代理方法中去如下设置:

让该大头针的选中状态设置为YES,可完美解决。

annotationView.selected = YES;


最后一个问题,当我们先点击特殊区域中心点(蓝色大头针及泡泡)然后再点击区域选择按钮(绿色大头针及泡泡),这时绿色不会显示,需要将前一个大头针取消显示,再点击才有效,或者点击区域选择按钮两次,这也是无法接受的。如下图:



前一秒点击的 “海上世界” 的泡泡并没有消失,而且跟随界面移动,后一秒的行政区域中心泡泡同时显示。要解决这个bug,我们要在每次点击区域按钮时遍历界面上的大头针,并设置取消选中状态。(而非移除)

 // 取消所有标注的选中状态
    for (id <BMKAnnotation> annotation in _mapView.annotations) {
        [_mapView deselectAnnotation:annotation animated:NO];
    }

这样,进而解决了中心位置问题、界面反复移动问题、前一个大头针泡泡仍继续展示问题。

总结来说,百度地图的iOS API确实写的不如安卓端完善,这些很简单的功能在安卓均提供有接口解决方案,但iOS端解决起来就费事了很多,用了一些看似不相关的属性参数。希望遇到类似问题的盆友可以得到帮助,一些百度地图API的其他使用问题也可以在评论下面交流,看到留言会一一回复。


已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页