最近写了一个类似链家地图找房功能。因为要求的是用高德地图,查了很多资料,找不到合适的参考资源,百度地图倒是一大堆。小白玩家,浪费了很多时间,决定写个Demo。主要是根据功能实现过程一步一步进行展示。(最新更新时间:2021.06.07 Demo有问题可联系我)
主要使用的几个方法(类似于tableView重用机制):
- (MAAnnotationView*)mapView:(MAMapView*)mapView viewForAnnotation:(id)annotation(大头针绘制)
- (void)mapView:(MAMapView*)mapView didSelectAnnotationView:(MAAnnotationView*)view(点击大头针)
- (void)mapView:(MAMapView*)mapView mapDidZoomByUser:(BOOL)wasUserAction(缩放结束后调用,可以根据wasUserAction判断是否是用户手动缩放)
Demo仅供参考,本人小白,代码质量请自行擦亮双眼。查看Demo需要先用cocoaPods集成高德等第三方库。所需库已经在Podfile里面写好了,使用的时候只需要pod install 即可运行。接下来走两张效果图:
复杂的地方并不是大头针的绘制,而是数据的筛选。实际开发会根据户型、价格等影响所展示的数据。所以数据请求这块一定得封装好。具体实现以及方法用途,注释写的很清楚,这里不再赘述。这里主要解释一下区间划分(以Demo为例,所在地为上海)。
高德的缩放级别为3-19。当点击地图找房进入地图页面,设置缩放级别为11,可以显示整个上海各个区域标注点(如:徐汇、松江、宝山等区),暂定义为(级别1)加以区分。点击徐汇则需要展示徐汇区域标注点,如龙华、上海南站、植物园等,定义为(级别2)。点击龙华则展示龙华区域所有小区名称和对应房源数量(如图:徐汇苑(2))(级别3)。点击徐汇苑则需要展示其内的两套可售房源。
缩放级别说明:
3-13 ---> 11 级别1
13-15 ---> 14 级别2
15-19 ---> 16 级别3
打开地图,当前缩放级别为11。声明一变量nowZoom用来记录当前设置的缩放级别,nowZoom = 11。当用户手动缩放地图,如果缩放级别在3-13之间,不处理数据。当缩放级别为13-15之间,则设置缩放级别为14(跳转级别2),更新数据源,更新nowZoom为14 ,设置中心点经纬度,刷新地图。同理,当前设置的缩放级别为nowZoom等于14时,如果用户缩放结束后,当前缩放级别在13-15之间则不处理,如果在3-13之间,则需要展示整个上海区域数据(级别1)。设置nowZoom为11,更新数据源并刷新地图,依此论推。至于缩放级别区间参数从哪儿来的,我只能说模仿链家一点点实验获取的参数,并不准确,需要根据项目具体情况而定。
地图周边 有时间的话会补上,效果图如下。小白日常笔记。大神见谅哈。