2013-07-14 39 views
0

尝试学习如何在屏幕上按下按钮时放置在用户位置的图钉。我是否需要使用Mkannotation,并且我希望这个引脚在未来放置新引脚时消失。这是我在controller.h中的代码。经度和纬度也是例如。MapKit,使用按钮在一个位置放置图钉

感谢

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

} 
+1

问题是什么?您是否阅读过任何教程或课程文档?你也应该在viewWillAppear中调用超级优先... –

回答

1

虽然我认为这是在一些细节的位置感知编程指南的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; 

(两个侧面观察:首先,无论你用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; 
}