iOS的Google地图SDK中可拖动标记

15

有人已经想出如何在新的Google Maps SDK for iOS中实现可拖动标记了吗?API本身尚未提供此功能,但功能请求已经提交。

如果我能够获得GMSMarker的底层视图,我就可以拦截触摸事件。有人试过这样做吗?


是的,有两个选项,它们都是正确的。请接受其中一个(Robert Weindl 的很酷),这样就可以把它从列表中划掉了:D - Daij-Djan
4个回答

19

从今天起,您不需要使用外部类,只需使您的标记物可拖动。

GMSMarker *myMarker = [[GMSMarker alloc] ...];
...
[myMarker setDraggable: YES];
// Use some kind of data to identify each marker, marker does not have 'tag' but 'userData' that is an 'id' type
[myMarker setUserData: markerId];

并实现相应的委托

@interface YourController: UIViewController<GMSMapViewDelegate> ...

设置您的代表

GMSMapView *myMapView = [[GMSMapView alloc] ...];
...
myMapView.delegate = self;

那么你可以处理每个标记事件,即:

-(void)mapView:(GMSMapView *)mapView didEndDraggingMarker:(GMSMarker *)marker{
    if ([marker.userData isEqualtoString:@"xMark"])
        NSLog(@"marker dragged to location: %f,%f", marker.position.latitude, marker.position.longitude);
}

有没有办法在拖动标记时禁用MapView的滚动动画? - orkenstein

3

有趣的是我无法下载这个zip文件:\ - holierthanthou84
截至2013年6月的Google Maps SDK 1.3.1版本中,Google添加了一个手势识别器,这会影响Robert的可拖动方法。 '<GMSBlockingGestureRecognizer: 0x11de50f0; baseClass = UIGestureRecognizer; state = Possible; cancelsTouchesInView = NO; delaysTouchesEnded = NO;' - Jenn
嘿,詹妮,感谢这个信息,我会在接下来的几天内检查并更新可拖动方法。 - Robert Weindl
从1.3.1版本开始,手势识别器不再接收足够(或任何)的触摸事件。有什么解决方法吗? - user1971035
2
@所有人:我刚刚更新了https://github.com/rweindl/google-maps-sdk-ios-drag-drop项目,以绕过新的GMSBlockingGestureRecognizer并重新启用拖放功能。 - Robert Weindl
显示剩余3条评论

2

Swift 3.0

太好了!我只需要将这个变量添加到我的标记中。然后,当仔细选择并长按标记片刻,您就可以拖动它。

marker.isDraggable = true  

我还没有实现委托来保存我的标记数据,但以下是它应该的样子。
extension MapVC : GMSMapViewDelegate {

    func mapView (_ mapView: GMSMapView, didEndDragging didEndDraggingMarker: GMSMarker) {

        print("Drag ended!")
        print("Update Marker data if stored somewhere.")

    }

}

注意:我曾试图让屏幕和标记在选择后不再浮动和上下动画。现在我明白这是一个“特性”,因为当您拖动时,手指会挡住视线,如果不移动屏幕,您将无法清楚地看到。(呃!)


0

已经完成。请参见:http://code.google.com/p/gmaps-api-issues/issues/detail?id=4975。 - user1971035

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接