? ? ? ?MKMapViewDelegate委托協(xié)議方法mapView:viewForAnnotation:的代碼如下:
? ? ? ?在上述代碼中,第①行代碼所示的委托方法mapView:viewForAnnotation:在地圖視圖添加標(biāo)注時(shí)回調(diào)。給地圖視圖添加標(biāo)注的方法是self.mapView.addAnnotation(annotation),其中annotation是地圖標(biāo)注對象。
? ? ? ?第②~④行代碼用于獲得地圖標(biāo)注對象MKPinAnnotationView,其中采用了可重用MKPinAnnotationView對象設(shè)計(jì)。這里使用可重用對象,是為了節(jié)約內(nèi)存。一般情況下,盡可能使用已有對象,減少實(shí)例化對象。首先,在第②行代碼中,我們使用dequeueReusableAnnotationViewWithIdentifier:方法通過一個(gè)可重用標(biāo)識符PIN_ANNOTATION獲得MKPinAnnotationView對象,如果這個(gè)對象不存在(第③行代碼判斷是否存在),則需要使用第④行代碼的initWithAnnotation:reuseIdentifier:構(gòu)造器創(chuàng)建,其中reuseIdentifier參數(shù)是可重用標(biāo)識符。
? ? ? ?第⑤行代碼設(shè)置大頭針標(biāo)注視圖的顏色為紫色。此外,該顏色還可以設(shè)置成紅色(Swift版MKPinAnnotationColor.Red,Objective-C版使用MKPinAnnotationColorRed)和綠色(Swift版使用MKPinAnnotationColor.Green,Objective-C版使用MKPinAnnotationColorGreen)。
? ? ? ?第⑥行代碼說明設(shè)置標(biāo)注視圖時(shí),是否以動畫效果的形式顯示在地圖上。第⑦行代碼用于在標(biāo)注點(diǎn)上顯示一些附加信息。如果canShowCallout為true(或YES),則點(diǎn)擊“大頭針”頭時(shí),會出現(xiàn)一個(gè)氣泡(如圖1),而氣泡中的文字信息封裝在MyAnnotation對象中,其中第一行文字(大一點(diǎn)的文字)保存在title屬性中,而第二行文字(小一點(diǎn)的文字)保存在subtitle屬性中。
? ? ? ?在委托方法的最后,返回annotationView標(biāo)注點(diǎn)視圖對象。
? ? ? ?最后,我們看看自定義標(biāo)注類MyAnnotation。MyAnnotation的定義如下:
? ? ? ?地圖上的標(biāo)注點(diǎn)類必須實(shí)現(xiàn)MKAnnotation協(xié)議。MKAnnotation協(xié)議需要重寫如下兩個(gè)屬性。
? ? ? ?1、itle:標(biāo)注點(diǎn)上的主標(biāo)題。
? ? ? ?2、subtitle:標(biāo)注點(diǎn)上的副標(biāo)題。
? ? ? ?在重寫subtitle屬性時(shí),我們將它的相關(guān)信息拼接成字符串賦值給它。這里,我們可以根據(jù)自己的需要和習(xí)慣拼接在這個(gè)字符串的前后。
? ? ? ?關(guān)于iOS地圖添加標(biāo)注的所有方法就已經(jīng)介紹完了,希望對大家有所幫助。如果大家對之前講的關(guān)于觸發(fā)添加動作的方法不太記得了,歡迎大家點(diǎn)擊《IOS地圖添加標(biāo)注一:觸發(fā)添加動作》進(jìn)行復(fù)習(xí)。