虽然我认为这是在一些细节的位置感知编程指南的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中调用超级优先... –