如何在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中工作,则拖动需要更多手动工作。文档中的链接也指出了如果需要的话,如何做到这一点的一个例子。
答
,你可能还需要增加以下内容:
if (newState == MKAnnotationViewDragStateStarting) {
annotationView.dragState = MKAnnotationViewDragStateDragging;
}
else if (newState == MKAnnotationViewDragStateEnding || newState == MKAnnotationViewDragStateCanceling) {
annotationView.dragState = MKAnnotationViewDragStateNone;
}
因为MKAnnotationView不准确(这可能使你的地图泛用您的注释,你甚至停止后拖着)
谢谢改变其拖拽状态你我不知道“didChangeDragState”,这是我想要的。 – 2010-10-23 10:39:49