如何在iOS上管理MKAnnotationView的拖放操作?

问题描述:

我在没有InterfaceBuilder的情况下工作。如何在iOS上管理MKAnnotationView的拖放操作?

我有一个MKAnnotationView与setDraggable的YES的实例, 在我的MKMapView我的注释视图显示,我可以拖放它。

如何在执行放置操作时执行方法? 在这种方法中,我需要我的注释视图的新坐标。

,如果你已经安装了setCoordinate方法您MKAnnotation对象正确,那么在didChangeDragState方法,新坐标应该已经在注释对象:

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

仅供参考,请参阅“标记你在docs here中作为可拖动的注释视图“部分。如果您的应用程序需要在4.x之前的OS中工作,则拖动需要更多手动工作。文档中的链接也指出了如果需要的话,如何做到这一点的一个例子。

+0

谢谢改变其拖拽状态你我不知道“didChangeDragState”,这是我想要的。 – 2010-10-23 10:39:49

,你可能还需要增加以下内容:

if (newState == MKAnnotationViewDragStateStarting) { 
    annotationView.dragState = MKAnnotationViewDragStateDragging; 
} 
else if (newState == MKAnnotationViewDragStateEnding || newState == MKAnnotationViewDragStateCanceling) { 
    annotationView.dragState = MKAnnotationViewDragStateNone; 
} 

因为MKAnnotationView不准确(这可能使你的地图泛用您的注释,你甚至停止后拖着)