0

尝试学习如何在用户按下屏幕上的按钮时在用户位置放置大头针。我是否需要使用 Mkannotation,我也希望这个 pin 在他们将来丢下一个新 pin 时消失。这是我在controller.h 中的代码。经度和纬度也只是举例。

谢谢

@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];

} 
4

1 回答 1

1

虽然我认为位置感知编程指南的向地图添加注释部分对此进行了详细讨论,但我有一些观察:

你问“我需要使用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;
}
于 2013-07-14T01:11:14.627 回答