Я работаю без InterfaceBuilder.
У меня есть экземпляр MKAnnotationView с setDraggable в YES,
В My MKMapView отображается мой аннотационный вид, и я могу перетащить его.
Как я могу выполнить метод, когда выполняется действие drop?
В этом методе мне нужны новые координаты моего аннотационного представления.
Ответ 1
Если вы правильно настроили объект MKAnnotation с помощью метода setCoordinate, то в методе 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);
}
}
Для справки см. раздел "Маркировка вашего аннотационного представления как Draggable" в здесь. Если ваше приложение должно работать в ОС раньше 4.x, перетаскивание требует более ручной работы. Ссылка в документах также указывает на пример того, как это сделать, если вам нужно.
Ответ 2
вы также можете добавить следующее:
if (newState == MKAnnotationViewDragStateStarting) {
annotationView.dragState = MKAnnotationViewDragStateDragging;
}
else if (newState == MKAnnotationViewDragStateEnding || newState == MKAnnotationViewDragStateCanceling) {
annotationView.dragState = MKAnnotationViewDragStateNone;
}
так как MKAnnotationView точно не изменяет свое состояние перетаскивания (что может сделать вашу панорамирование карты вашей аннотацией даже после остановки перетаскивания)