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