拖动时获取MKAnnotation的坐标

Dan*_*iel 3 iphone objective-c mapkit

我正在根据用户添加的注释位置创建路径(MKPolyline).我想允许用户通过拖动引脚来更改路径.我目前可以这样做,但MKPolyline在引脚掉线之前不会更新.

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState为此实现MKAnnotationViewDragStateDragging但它只提醒我用户正在拖动引脚而不是关于新位置的通知.

每次更改时,如何获取注释的当前位置?我希望在拖动时通知有关位置的任何变化,以便能够更新MKPolyline以跟随引脚移动,以更好地反映路径的变化.

有任何想法吗?谢谢!

Ava*_*rio 5

创建子类MKAnnotationView并将该子类用于要拖动的注释.在该子类中:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    CLLocationCoordinate2D location = [_mapView convertPoint:self.center toCoordinateFromView:self.superview];
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,与MKAnnotationView关联的MKAnnotation对象在删除MKAnnotationView之前不会更新其坐标.因此,您必须使用MKAnnotationView本身的位置,并将其转换为有效坐标.

这还需要对MKMapView的引用,该注释已添加到(_mapView此处),您可以在创建时将其传递给视图.

如果您已设置centerOffset注释视图的属性,则还需要考虑到:

CLLocationCoordinate2D location = [_mapView convertPoint:CGPointMake(self.center.x - self.centerOffset.x, self.center.y - self.centerOffset.y) toCoordinateFromView:self.superview];
Run Code Online (Sandbox Code Playgroud)