如何在MKmap视图上拖动我的注释像Google Pin Drop and Draging:iOS

时间:2016-04-13 06:44:25

标签: ios objective-c annotations mkmapview

我需要一些帮助。如何在MKMapview中将注释(地图图钉)从一个点拖动到另一个点。 在地图上的图钉下拉后,添加过程非常好,我想拖动该图钉(注释)并像Google地图一样更改该位置。

快乐编码

3 个答案:

答案 0 :(得分:7)

首先允许引脚拖动

- (MKAnnotationView *) mapView: (MKMapView *) mapView viewForAnnotation: (id) annotation 
{ 
    pin.draggable = YES; 
}

- (void)mapView:(MKMapView *)mapView
 annotationView:(MKAnnotationView *)annotationView
didChangeDragState:(MKAnnotationViewDragState)newState
   fromOldState:(MKAnnotationViewDragState)oldState
{
    if (newState == MKAnnotationViewDragStateEnding)
    {
        CLLocationCoordinate2D droppedAt = annotationView.annotation.coordinate;
        [annotationView.annotation setCoordinate:droppedAt];
         if(DEBUG_MODE){
        NSLog(@"Pin dropped at %f,%f", droppedAt.latitude, droppedAt.longitude);
         }
    }

}

答案 1 :(得分:2)

此过程是您需要允许引脚可拖动,并且您将在didChangeDragState MKMapView的{​​{1}}上获取该目标的lat长。

尝试以下代码。

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id < MKAnnotation >)annotation
{
    MKPinAnnotationView *pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"ident"];
    pinView.draggable = YES;
    pinView.animatesDrop = YES;
    return pinView;
}
- (void)mapView:(MKMapView *)mapView
 annotationView:(MKAnnotationView *)annotationView
didChangeDragState:(MKAnnotationViewDragState)newState
   fromOldState:(MKAnnotationViewDragState)oldState
{
    if (newState == MKAnnotationViewDragStateEnding)
    {
        droppedAt = annotationView.annotation.coordinate;
        NSLog(@"Pin dropped at %f,%f", droppedAt.latitude, droppedAt.longitude);
    }
}

答案 2 :(得分:0)

要拖动注释,请将注释的draggable属性设置为YES。

viewForAnnotation委托方法中设置注释的可拖动性。

使用委托方法didChangeDragState方法获取注释的新坐标。

- (void)mapView:(MKMapView *)mapView 
        annotationView:(MKAnnotationView *)annotationView 
        didChangeDragState:(MKAnnotationViewDragState)newState 
        fromOldState:(MKAnnotationViewDragState)oldState 
{

    if (newState == MKAnnotationViewDragStateStarting) {


    }
    if (newState == MKAnnotationViewDragStateEnding) //Annotation dragging ended
    {
        CLLocationCoordinate2D droppedCord = annotationView.annotation.coordinate;
        NSLog(@"New position %f,%f", droppedCord.latitude, droppedCord.longitude);
    }
}