我需要一些帮助。如何在MKMapview中将注释(地图图钉)从一个点拖动到另一个点。 在地图上的图钉下拉后,添加过程非常好,我想拖动该图钉(注释)并像Google地图一样更改该位置。
快乐编码
答案 0 :(得分:7)
首先允许引脚拖动
- (MKAnnotationView *) mapView: (MKMapView *) mapView viewForAnnotation: (id) annotation
{
pin.draggable = YES;
}
- (void)mapView:(MKMapView *)mapView
annotationView:(MKAnnotationView *)annotationView
didChangeDragState:(MKAnnotationViewDragState)newState
fromOldState:(MKAnnotationViewDragState)oldState
{
if (newState == MKAnnotationViewDragStateEnding)
{
CLLocationCoordinate2D droppedAt = annotationView.annotation.coordinate;
[annotationView.annotation setCoordinate:droppedAt];
if(DEBUG_MODE){
NSLog(@"Pin dropped at %f,%f", droppedAt.latitude, droppedAt.longitude);
}
}
}
答案 1 :(得分:2)
此过程是您需要允许引脚可拖动,并且您将在didChangeDragState
MKMapView
的{{1}}上获取该目标的lat长。
尝试以下代码。
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id < MKAnnotation >)annotation
{
MKPinAnnotationView *pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"ident"];
pinView.draggable = YES;
pinView.animatesDrop = YES;
return pinView;
}
- (void)mapView:(MKMapView *)mapView
annotationView:(MKAnnotationView *)annotationView
didChangeDragState:(MKAnnotationViewDragState)newState
fromOldState:(MKAnnotationViewDragState)oldState
{
if (newState == MKAnnotationViewDragStateEnding)
{
droppedAt = annotationView.annotation.coordinate;
NSLog(@"Pin dropped at %f,%f", droppedAt.latitude, droppedAt.longitude);
}
}
答案 2 :(得分:0)
要拖动注释,请将注释的draggable属性设置为YES。
在viewForAnnotation
委托方法中设置注释的可拖动性。
使用委托方法didChangeDragState
方法获取注释的新坐标。
- (void)mapView:(MKMapView *)mapView
annotationView:(MKAnnotationView *)annotationView
didChangeDragState:(MKAnnotationViewDragState)newState
fromOldState:(MKAnnotationViewDragState)oldState
{
if (newState == MKAnnotationViewDragStateStarting) {
}
if (newState == MKAnnotationViewDragStateEnding) //Annotation dragging ended
{
CLLocationCoordinate2D droppedCord = annotationView.annotation.coordinate;
NSLog(@"New position %f,%f", droppedCord.latitude, droppedCord.longitude);
}
}