iOS 【关于百度地图大头针标记 选中状态/点击状态 的区别及处理办法】
2017-04-11 12:07
471 查看
在项目中遇到这样一个需求,在点击区域选择按钮的时候会显示当前的 区域范围(BMKPolylineView) 以及 行政区域中心(大头针),并且大头针要显示出气泡展示当前区域车辆信息。如图:
细心的朋友可能发现,地图的中心应该是该区域的地理中心,而非我们获取到的行政中心。但是问题在于我们在弹出行政中心(绿色大头针)的泡泡时,是调用了:
而这句话的作用有二:① 显示泡泡(使大头针变为选中状态) ② 点击该大头针(使大头针变为点击状态)
但是大头针一旦成为了点击状态,那么就默认使该点击的大头针作为当前地图的中心点,显然这不是我们想要的。
为了让大头针选中弹出泡泡,并且不会让地图的中心点移动到该大头针的位置,我们做如下处理:
在大头针 BMKAnnotationView 初始化的代理方法中将该大头针的 view 的触摸事件取消。
因为大头针的触摸事件和大头针是否显示弹窗是两个事件,所以彼此互不影响。
又出现了一个新的情况,那就是在不断切换区域的时候,会重新定位到行政区域中心的位置,然后再跳转到地理区域中心的位置。这样一来,界面会卡顿,定位两次的效果也不是很美观。我们仍旧可以在上面的代理方法中去如下设置:
让该大头针的选中状态设置为YES,可完美解决。
最后一个问题,当我们先点击特殊区域中心点(蓝色大头针及泡泡)然后再点击区域选择按钮(绿色大头针及泡泡),这时绿色不会显示,需要将前一个大头针取消显示,再点击才有效,或者点击区域选择按钮两次,这也是无法接受的。如下图:
前一秒点击的 “海上世界” 的泡泡并没有消失,而且跟随界面移动,后一秒的行政区域中心泡泡同时显示。要解决这个bug,我们要在每次点击区域按钮时遍历界面上的大头针,并设置取消选中状态。(而非移除)
这样,进而解决了中心位置问题、界面反复移动问题、前一个大头针泡泡仍继续展示问题。
总结来说,百度地图的iOS API确实写的不如安卓端完善,这些很简单的功能在安卓均提供有接口解决方案,但iOS端解决起来就费事了很多,用了一些看似不相关的属性参数。希望遇到类似问题的盆友可以得到帮助,一些百度地图API的其他使用问题也可以在评论下面交流,看到留言会一一回复。
细心的朋友可能发现,地图的中心应该是该区域的地理中心,而非我们获取到的行政中心。但是问题在于我们在弹出行政中心(绿色大头针)的泡泡时,是调用了:
// 选定大头针,弹出车辆数目 [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的其他使用问题也可以在评论下面交流,看到留言会一一回复。
相关文章推荐
- iOS 百度地图_大头针点击_区别点击哪个_点击效果改变
- 关于uibutton选中状态和高亮状态的区别
- iOS开发-UITableViewCell(UICollectionViewItem)需要两个手指点击或者长按才可以选中,解决办法
- iOS 关于tabbar点击navigationcontroller root到根视图的问题解决办法
- iOS调试——关于insertRowsAtIndexPaths方法崩溃以及动画实效的处理办法
- iOS 关于推送点击推送通知的处理
- React native添加iOS远程通知点击通知打开APP在APP杀死状态下闪退解决办法
- iOS 关于UICollectionView选中状态,当使用reloadData方法时出现数据的问题?
- 按钮点击一个,其它都取消选中状态的iOS开发,
- 关于iOS开发中得到null值得处理办法
- 关于ios通话应用退到后台语音中断处理办法
- 关于状态相关函数调用的处理办法
- [绍棠]iOS开发-UITableViewCell(UICollectionViewItem)需要两个手指点击或者长按才可以选中,解决办法
- iOS 自定义百度地图大头针点击事件
- 关于百度地图自定义覆盖物不能触发点击事件的处理
- 关于子视图超出父视图后无法响应点击事件的处理办法
- iOS 关于信鸽推送点击推送通知的处理
- iOS调试——点击手势响应冲突处理办法
- iOS 关于信鸽推送点击推送通知的处理
- 关于ListView中checkBox选中状态错乱问题的解决办法