尝试学习如何在用户按下屏幕按钮时在用户位置放置大头针。我是否需要使用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/