Ios 在MKMapView上放置一个pin

Ios 在MKMapView上放置一个pin,ios,objective-c,mkmapview,Ios,Objective C,Mkmapview,iPhone新手来自Java。因此,我在这一阶段的目标是允许用户在地图上“放置pin”。我对地图的初始化如下所示: - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"your view did load, I'm going to initizlie the map by your location"); CLLocationCoordinate2D location = theMap.userLocation.co

iPhone新手来自Java。因此,我在这一阶段的目标是允许用户在地图上“放置pin”。我对地图的初始化如下所示:

- (void)viewDidLoad {
    [super viewDidLoad];
     NSLog(@"your view did load, I'm going to initizlie the map by your location");
     CLLocationCoordinate2D location = theMap.userLocation.coordinate;
     NSLog(@"Location found from Map: %f %f",location.latitude,location.longitude);

     MKCoordinateRegion region;
     MKCoordinateSpan span;

     NSLog(@"coordinates: %f %f",location.latitude,location.longitude);
     if (TARGET_IPHONE_SIMULATOR) {
         NSLog(@"You're using the simulator:");
         location.latitude  =  40.8761620;
         location.longitude = -73.782596;
     } else {
         location.latitude  =  theMap.userLocation.location.coordinate.latitude;
         location.longitude =  theMap.userLocation.location.coordinate.longitude;
     }

     span.latitudeDelta = 0.001;
     span.longitudeDelta = 0.002;

     region.span = span;
     region.center = location;

     [theMap setRegion:region animated:YES];
     [theMap regionThatFits:region];
     [theMap setMapType:MKMapTypeSatellite]; 
     [theMap setZoomEnabled:YES];
     [theMap setScrollEnabled:YES];
     [theMap setShowsUserLocation:YES];
}
对于所要求的引脚下降,我有

- (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation {
    MKPinAnnotationView *pinView = nil;
    if (annotation != theMap.userLocation) {
        static NSString *defaultPinID = @"aPin";
        pinView = (MKPinAnnotationView *)[theMap dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
    if (pinView == nil)
        pinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];
    } else {
    }
    pinView.pinColor = MKPinAnnotationColorRed;
    pinView.canShowCallout = YES;
    pinView.animatesDrop = YES;
    return pinView;
}
-(MKAnnotationView*)地图视图:(MKMapView*)mV视图用于注释:(id)注释{
MKPinAnnotationView*pinView=nil;
if(注释!=theMap.userLocation){
静态NSString*defaultPinID=@“aPin”;
pinView=(MKPinAnnotationView*)[theMap dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
如果(pinView==nil)
pinView=[[MKPinAnnotationView alloc]initWithAnnotation:annotation重用标识符:defaultPinID]autorelease];
}否则{
}
pinView.pinColor=MKPinAnnotationColorRed;
pinView.canShowCallout=是;
pinView.animatesDrop=是;
返回pinView;
}
我不确定自己是否完全理解此地图(theMap)在注释的
视图中是如何工作的?我的意思是,用户所做的操作将激活
viewForAnnotation
方法?这个代码不起作用,我不知道为什么

我正在使用模拟器,所以我不确定是否有一个按钮我应该按下或
Alt单击它

我不确定我是否完全理解此地图(theMap)如何在viewForAnnotation中用于PIN

MKPinAnnotationView
只是另一种注释视图——即,向地图添加注释(符合
MKAnnotation
协议的对象)。当地图想要显示注释时(可能是因为用户滚动地图以便注释在视图中),它会要求您提供一个视图来表示注释。此时,您的
mapView:viewForAnnotation:
方法可以获取或创建一个pin注释视图并返回该视图。除了滚动或缩放之外,用户不会直接执行任何操作来触发
mapView:viewForAnnotation:

如果你想让用户能够输入pin,那是另一回事。您需要提供一个视图(甚至可能是一个
MKPinAnnotationView
)供他们拖动。当它们指示要放下销(可能是通过抬起手指)时,可以删除视图并在该点添加适当的注释。然后,地图视图将通过调用其委托的
mapView:viewForAnnotation:
方法,要求您提供一个表示注释的视图

这个代码不起作用,我不知道为什么

你在地图上添加注释了吗?如果是这样,您是否正在查看地图上应该显示它们的部分


我猜您正在查看
animatesDrop
属性,并希望它能够完成整个用户插针放置交互。它不会那样做。将该属性设置为
YES
只会在pin出现在地图上时为其设置动画。

好的,过了一会儿,我明白了哪里出了问题:

theMap.delegate = (id) self;
在构造函数中缺少。一旦我这样做了,最终用户的任何操作都将激活映射的其他方法(协议)