2013-07-14 38 views
0

嘗試學習如何在屏幕上按下按鈕時放置在用戶位置的圖釘。我是否需要使用Mkannotation,並且我希望這個引腳在未來放置新引腳時消失。這是我在controller.h中的代碼。經度和緯度也是例如。MapKit,使用按鈕在一個位置放置圖釘

感謝

@implementation ViewController 

- (void)viewWillAppear:(BOOL)animated { 

CLLocationCoordinate2D zoomLocation; 
zoomLocation.latitude = 39.281516; 
zoomLocation.longitude = -76.580806; 

MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation,    
0.1*METERS_PER_MILE, 0.1*METERS_PER_MILE); 

[_mapView setRegion:viewRegion animated:YES]; 

} 
+1

問題是什麼?您是否閱讀過任何教程或課程文檔?你也應該在viewWillAppear中調用超級優先... –

回答

1

雖然我認爲這是在一些細節的位置感知編程指南的Adding Annotations to a Map節討論,我有幾點看法:

你問「我需要使用MKAnnotation?「是和不是。

  • 是的,所有的註釋應符合MKAnnotation協議。正如該指南所述,如果您可以創建自己的註釋子類,那麼您希望它明確聲明它符合MKAnnotation協議。

  • 但是,不,您不必始終創建符合MKAnnotation協議的自己的註釋類。您也可以使用預定義的註解類,MKPointAnnotation(這本身已經符合MKAnnotation協議),如:

    MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init]; 
    annotation.coordinate = CLLocationCoordinate2DMake(39.281516, -76.580806); 
    annotation.title = @"Lens Crafters"; 
    annotation.subtitle = @"2400 Boston St."; 
    [self.mapView addAnnotation:annotation]; 
    

如果你想在你把一個新的舊的註釋消失在您的地圖上,您只需(a)保留對舊註釋的引用; (b)添加新註釋時,刪除舊註釋(如果您有舊註釋);然後(c)添加新的註釋。

因此,你可能已經定義了一些類屬性的註釋:

@property (weak, nonatomic) id<MKAnnotation> annotation; 

(兩個側面觀察:首先,無論你用weakstrong是由你和你的應用程序設計,通過說weak,我當說明從地圖上刪除註釋時,我很高興地發佈了annotation。也許你希望它保留下來,直到你明確地指出nil這個屬性,在這種情況下,你會使這個屬性爲strong。這完全取決於你和你的應用程序的目標;其次,我使用類型id<MKAnnotation>(即「符合到MKAnnotation「),這使得這更加靈活。如果以後用您自己的自定義註釋類替換MKPointAnnotation,則此屬性仍然有效。但是如果你想明確定義此annotation屬性是一個MKPointAnnotation以配合您的註釋附加程序,這很好,太)

反正現在你有這樣的屬性,您現在可以編寫添加註釋的方法到您的地圖(這將刪除舊的):

- (void)addAnnotationAtCoordinate:(CLLocationCoordinate2D)coordinate 
          title:(NSString *)title 
         subtitle:(NSString *)subtitle 
{ 
    if (self.annotation) 
     [self.mapView removeAnnotation:self.annotation]; 

    MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init]; 
    annotation.coordinate = coordinate; 
    annotation.title = title; 
    annotation.subtitle = subtitle; 

    [self.mapView addAnnotation:annotation]; 

    self.annotation = annotation; 
}