我可以拖动我的注释,当我放下它时,我可以读取位置。但是,我需要不断更新我的标题与我拖动的位置。我尝试添加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答案 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];
}