[IOS] 在MapView中使用地圖釘

來源:互聯網
上載者:User

使用地圖釘,首先我們需要為地圖釘建立一個附註類(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擷取當前地圖釘的徑緯度。
之後,我們可以擷取地理名稱(街道,商鋪),與當前位置間的路線,等等,這些內容以後再做介紹。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.