3

我正在根据用户添加的注释位置创建路径(MKPolyline)。我想允许用户通过拖动引脚来更改路径。我目前可以做到这一点,但 MKPolyline 直到 pin 被删除才会更新。

我实现- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)annotationView didChangeDragState:(MKAnnotationViewDragState)newState fromOldState:(MKAnnotationViewDragState)oldState了,MKAnnotationViewDragStateDragging但它只提醒我用户正在拖动图钉而不是通知新位置。

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

有任何想法吗?谢谢!

4

2 回答 2

5

创建一个子类MKAnnotationView并将该子类用于您正在拖动的注释。在该子类中:

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

不幸的是,与 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];
于 2013-09-04T02:34:57.447 回答
1

免责声明:我在 Xamarin.iOS/MonoTouch 中工作,但此解决方案可能适用于 Objective-C,因为处理的大多数问题都是相同的。

我按照 Avario 的建议创建了自定义注释视图,但 touchesMoved 事件从未被命中。相反,我覆盖了 Center 属性 (setCenter) 并能够以这种方式获得坐标变化。

于 2013-09-09T19:01:39.940 回答