Ios 如何在Mkmapview中拖放注释接点

Ios 如何在Mkmapview中拖放注释接点,ios,objective-c,Ios,Objective C,我有一个注释pin,用于显示可拖动的当前搜索位置。该批注pin正在拖动,然后该pin显示用户放下pin。如何执行此操作。若要使批注可拖动,请将批注视图的“可拖动”属性设置为“是” 这通常在viewForAnnotation委托方法中完成 例如: - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation { if ([annotation i

我有一个注释pin,用于显示可拖动的当前搜索位置。该批注pin正在拖动,然后该pin显示用户放下pin。如何执行此操作。

若要使批注可拖动,请将批注视图的“可拖动”属性设置为“是”

这通常在viewForAnnotation委托方法中完成

例如:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    static NSString *reuseId = @"pin";
    MKPinAnnotationView *pav = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseId];
    if (pav == nil)
    {
        pav = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId];
        pav.draggable = YES;
        pav.canShowCallout = YES;
    }
    else
    {
        pav.annotation = annotation;
    }

    return pav;
}
-(MKAnnotationView*)地图视图:(MKMapView*)地图视图注释:(id)注释
{
if([annotation isKindOfClass:[MKUserLocation类]])
返回零;
静态NSString*reuseId=@“pin”;
MKPinAnnotationView*pav=(MKPinAnnotationView*)[mapView出列可重用AnnotationViewWithIdentifier:reuseId];
如果(pav==nil)
{
pav=[[MKPinAnnotationView alloc]initWithAnnotation:annotation-reuseIdentifier:reuseId];
pav.draggable=是;
pav.canShowCallout=是;
}
其他的
{
pav.annotation=注释;
}
返回pav;
}
如果需要处理用户何时停止拖放批注, 见:

如何在IOS上管理MKAnnotationView的拖放


此外,注释对象(实现MKAnnotation的对象)应具有可设置的坐标特性。您使用的是MKPointAnnotation类,它确实实现了setCoordinate,因此该部分已经得到处理。

iOS 11.x Swift 4.0 answer,基于解决方案

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

    if annotation is MKUserLocation {
        return nil
    }

    let reuseId = "pin"
    var pav: MKPinAnnotationView? = self.mapView.dequeueReusableAnnotationView(withIdentifier: reuseId)
    if pav == nil {
        pav = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
        pav?.isDraggable = true
        pav?.canShowCallout = true
    } else {
        pav?.annotation = annotation
    }

    return pav
}

@vijetha:如果答案真的对你有帮助的话,就投票吧。。。谢谢