雖然我認爲這是在一些細節的位置感知編程指南的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;
(兩個側面觀察:首先,無論你用weak
或strong
是由你和你的應用程序設計,通過說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;
}
來源
2013-07-14 01:11:14
Rob
問題是什麼?您是否閱讀過任何教程或課程文檔?你也應該在viewWillAppear中調用超級優先... –