拖动注释时的回调

时间:2014-01-04 07:20:30

标签: ios drag-and-drop annotations

我可以拖动我的注释,当我放下它时,我可以读取位置。但是,我需要不断更新我的标题与我拖动的位置。我尝试添加UIPanGestureRecognizer但是在拖动注释时不起作用。在拖动注释时,我应该使用什么方法来不断回调我的代码?

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

CLLocationCoordinate2D annoCoord = view.annotation.coordinate;

switch (newState) {
    case MKAnnotationViewDragStateStarting:
        NSLog(@"Start dragging annotation");
        break;

    case MKAnnotationViewDragStateDragging:
        NSLog(@"Dragging annotation");
        break;

    case MKAnnotationViewDragStateEnding:
        [view setDragState:MKAnnotationViewDragStateNone]; // must be here! else multiple calls
        NSLog(@"Ending dragging annotation at %f : %f", annoCoord.latitude, annoCoord.longitude);
        break;

    case MKAnnotationViewDragStateCanceling:
        NSLog(@"Cancel dragging annotation");
        break;

    case MKAnnotationViewDragStateNone:
        NSLog(@"None dragging annotation");
        break;
    default:
        break;
    }

}

我只在状态开始时获得回调,而不是在拖动过程中。

非常感谢任何帮助。

欢呼,tord

1 个答案:

答案 0 :(得分:5)

您可以在MKAnnotationView中心属性上设置观察者。然后在观察者的回调中,您可以将注释视图中心位置从屏幕坐标转换为地理坐标。

[myAnnotationView addObserver:myMapViewDelegate forKeyPath:@"center" options:NSKeyValueObservingOptionNew context:nil];
...
- (void)observeValueForKeyPath:(NSString *)keyPath
                  ofObject:(id)object
                    change:(NSDictionary *)change
                   context:(void *)context
{
    CGPoint position = myAnnotationView.center;
    //... here take  myAnnotationView.centerOffset into consideration to get the correct coordinate  
    CLLocationCoordinate2D newCoordinate = [self.mapView convertPoint:position toCoordinateFromView:self.superview];
}