尝试学习如何在用户按下屏幕按钮时在用户位置放置大头针。我是否需要使用Mkannotation,我还希望此引脚在将来删除新的引脚时消失。这是我在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];

}

最佳答案

虽然我认为这在“位置感知编程指南”的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;
}

关于ios - MapKit,通过按钮将销钉放在一个位置上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17635417/

10-11 00:29