使用地圖釘,首先我們需要為地圖釘建立一個附註類(Annotation),代碼如下:
@interface MyAnnotation: NSObject<MKAnnotation>// 實現MKAnnotation的方法,該方法在地圖釘被拖拽時被調用,也可主動調用,用來更改地圖釘的位置。-(void) setCoordinate:(CLLocationCoordinate2D)newCoordinate;
Annotation不僅記錄了地圖釘的位置,還包括地圖釘的名稱(property title)以及副名稱(property subtitle)。
@implementation MyAnnotation// 地圖釘位置@synthesize coordinate;// 實現擷取title值的函數-(NSString*) title{ return "我是地圖釘";}// 實現擷取subtitle值的函數-(NSString*) subtitle{ return "我是副名稱";}
這樣,在地圖中,當我們點擊選取地圖釘時,顯示
接下來,我們要添加地圖釘,在頁面的ViewController的viewDidLoad函數中我們添加下面的代碼
-(void) viewDidLoad{ // … MyAnnotation* annotation = [[MyAnnotation alloc] init]; // 設計地圖釘位置(徑緯度) [annotation setCoordinate:CLLocationCoordinate2DMake(32.632, 120.902)]; // 為地圖添加大頭釘,m_mapView是MKMapView的控制項變數 [m_mapView addAnnotation:m_annotation];}
到目前為止,我們都在處理地圖的附註對象MyAnnotation,這個對象只是記錄了地點的位置,名稱,並不是我們想要的大頭釘。接下來,大頭釘要出場了。
首先,我們需要讓ViewController實現MKMapViewDelegate協議(protocol),然後實現如下的函數,該函數會在上面的代碼中添加地圖釘後被調用。
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{ static NSString* annotationID = @"MyLocation"; if (![annotation isKindOfClass:[MyAnotation class]]) { return nil; } MKPinAnnotationView* pinView = (MKPinAnnotationView*) [mapView dequeueReusableAnnotationViewWithIdentifier:annotationID]; if (pinView == nil) { // 建立地圖釘,MKPinAnnotationView對象 pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationID] autorelease]; pinView.animatesDrop = YES; // 地圖釘出現時使用落下動畫效果 pinView.canShowCallout = YES; // 地圖釘選中後顯示名稱資訊 pinView.draggable = YES; // 地圖釘可被拖動 } else { // 地圖釘已經建立過 pinView.annotation = annotation; } return pinView;}
好了,到這裡,我們已經成功的為地圖添加了地圖釘,我們可以通過m_annotation.coordinate擷取當前地圖釘的徑緯度。
之後,我們可以擷取地理名稱(街道,商鋪),與當前位置間的路線,等等,這些內容以後再做介紹。