我正在根据用户添加的注释位置创建路径(MKPolyline)。我想允许用户通过拖动引脚来更改路径。我目前可以这样做,但MKPolyline在引脚掉线之前不会更新。
我为- (void)mapView:(MKMapView *)mapView
annotationView:(MKAnnotationView *)annotationView
didChangeDragState:(MKAnnotationViewDragState)newState
fromOldState:(MKAnnotationViewDragState)oldState
实施了MKAnnotationViewDragStateDragging
,但它只提醒我用户正在拖动图钉并且没有通知新位置。
每次更改时,如何获取注释的当前位置?我希望在拖动时通知有关位置的任何变化,以便能够更新MKPolyline以跟随引脚移动,以更好地反映路径的变化。
有什么想法吗?谢谢!
答案 0 :(得分: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];
答案 1 :(得分:1)
免责声明:我在Xamarin.iOS / MonoTouch工作,但此解决方案可能在Objective-C中应用相同,因为大多数问题都是相同的。
我根据Avario的建议创建了自定义注释视图,但是touchesMoved事件从未被命中。相反,我覆盖了Center属性(setCenter),并且能够以这种方式获得坐标更改。