iOS谷歌地图 - 如何知道用户何时开始或停止拖动地图

时间:2014-02-21 09:36:59

标签: ios google-maps

我正在使用Google map SDK 6.1进行开发。我想知道用户何时开始拖动或停止拖动地图,我只找到了2个委托功能:didChangeCameraPositionidleAtCameraPosition。有没有办法在用户开始或停止拖动地图时捕获?

5 个答案:

答案 0 :(得分:27)

要检测用户是否拖动了地图,我认为最好使用此方法

- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture

并检查gesture参数是否为true

如上所述,didChangeCameraPosition被多次调用,但由于它既可以通过代码设置地图中心来调用,也可以通过手势调用,但您无法真正看到仅在该方法上存在差异。

答案 1 :(得分:7)

来自documentation

- (void) mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position 

当地图变为空闲时,在任何未完成的手势或动画完成后(或在明确设置相机后)

因此,使用此委托,您可以在用户停止拖动mapView时捕获。

要在用户开始拖动时收到通知,只需使用您指出的其他代理:

- (void) mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position 

在任何动画或地图上的手势期间重复调用(或者,如果明确设置了相机,则重复一次)。

对于所有中间相机位置,可能不会调用此方法。它总是被调用为动画或手势的最终位置。

我不确定是什么令你感到困惑。

答案 2 :(得分:6)

Swift 4:

func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
    if (gesture){
        print("dragged")
    }
}

答案 3 :(得分:1)

谨防idleAtCameraPosition是指当你抬起手指时地图停止移动。

我必须继承GSMapView并添加PanGestureRecognizer>>当手指抬起时状态结束。

https://github.com/clearbrian/GoogleMapiOS_TapEndedGesture

答案 4 :(得分:0)

Swift 5.1

element.style {
    word-break: break-all;
    width: 14px;
}

.job-title-and-info .title .title-body .info span {
    font-size: 1.4rem;
    font-weight: 400;
    font-family: "Roboto", sans-serif;
    margin-right: 15px;
    color: #6f7484;


此方法仅在拖动地图视图开始时调用,因此它无助于获取新坐标。

通过对Google api和其他方法的分析,我没有找到合适的方法。对于这个问题,最好的答案是使用平移手势。

将平移手势添加为mapView

func mapView(_ mapView: GMSMapView, willMove gesture: Bool) 

平移手势方法的实现

self.mapView.settings.consumesGesturesInView = false
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(self. panHandler(_:)))
self.mapView.addGestureRecognizer(panGesture)