? ? ? ?如果要實現在地圖視圖上添加標注點,需要兩個步驟:一是觸發添加動作,二是實現地圖委托方法mapView:viewForAnnotation:。我們今天先來學習一下觸發添加動作的方法。
? ? ? ?觸發添加動作
? ? ? ?我們通過“查詢”按鈕觸發添加標注動作,相關代碼如下:
? ? ? ?當用戶點擊“查詢”按鈕時,開始進行地理信息編碼,如果編碼成功,則調用completionHandler方法。第①行代碼用于移除目前地圖上所有的標注點,否則反復點擊“查詢”按鈕,你會發現地圖上的標注點越來越多。
? ? ? ?第②行代碼使用MKCoordinateRegionMakeWithDistance函數創建一個結構體MKCoordinateRegion,該結構體封裝了一個地圖區域,其定義如下:
? ? ? ?在上述代碼中,成員center定義了區域中心點,它是CLLocationCoordinate2D結構體類型。span成員定義了區域的跨度,它是MKCoordinateSpan結構體類型。MKCoordinateSpan結構體封裝了在地圖上的跨度信息,它的定義如下:
? ? ? ?在上述代碼中,latitudeDelta為南北跨度,它的單位是“度”,1度大約是111公里。longitudeDelta為東西跨度,在赤道上1度大約是111公里,隨著靠近兩極,這個距離逐步變小,在地球的兩個極點時變為0公里。它們是有差別的,這源于我們地球經線和緯線的中心點不同。
? ? ? ?在第②行代碼中,MKCoordinateRegionMakeWithDistance函數的第一個參數是CLLocationCoordinate2D結構,指定了目標區域的中心點;第二個參數是目標區域南北的跨度,其單位是米;第三個參數是目標區域東西的跨度,其單位是米。后面兩個參數的調整會影響地圖縮放。
? ? ? ?第③行代碼重新設置地圖視圖的顯示區域。animated設置為true(或YES)時,會使地圖有“飛”過去的動畫效果。
? ? ? ?第④行代碼用于實例化MyAnnotation對象。MyAnnotation類是我們自定義的實現MKAnnotation協議的地圖標注點類。因為地圖上的標注點是MKPinAnnotationView(大頭針標注視圖)類型,這個視圖要求標注點信息由實現MKAnnotation協議的類提供。如果標識點上顯示的信息是固定的,可以使用Map Kit API實現MKPointAnnotation標注類。第④~⑤行代碼將地標CLPlacemark對象信息取出,放入到MapLocation對象中。為什么要這樣導來導去呢?
? ? ? ?這是因為在MKPinAnnotationView視圖中,只能接收實現MKAnnotation協議的類,而地標類CLPlacemark沒有實現MKAnnotation協議。
? ? ? ?第⑥行代碼把標注點MyAnnotation對象添加到地圖視圖上。一旦該方法被調用,地圖視圖委托方法mapView:viewForAnnotation:就會被回調。
? ? ? ?關于IOS地圖添加標注中的觸發添加動作就先介紹到這里,還有最后一個步驟將在下次為大家介紹,歡迎大家繼續關注百恒網絡公司網站!