? ? ? ?最近寫了一個類似鏈家地圖找房功能。因為要求的是用高德地圖,查了很多資料,找不到合適的參考資源,百度地圖倒是一大堆。小白玩家,浪費了很多時間,決定寫個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,更新數據源并刷新地圖,依此論推。至于縮放級別區間參數從哪兒來的,我只能說模仿鏈家一點點實驗獲取的參數,并不準確,需要根據項目具體情況而定。
地圖周邊 有時間的話會補上,效果圖如下。小白日常筆記。大神見諒哈。