Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS谷歌地图-如何知道用户何时开始或停止拖动地图_Ios_Google Maps - Fatal编程技术网

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

iOS谷歌地图-如何知道用户何时开始或停止拖动地图,ios,google-maps,Ios,Google Maps,我正在使用googlemapsdk6.1进行开发。我想知道用户何时开始拖动或停止拖动地图,我刚刚找到了两个委托函数:didChangeCameraPosition和idleAtCameraPosition。是否有方法捕获用户何时开始或停止拖动地图?从: 当地图处于空闲状态时,在完成任何未完成的手势或动画后(或在明确设置相机后)调用 因此,使用此委托,您可以捕获用户何时停止拖动mapView 要在用户确实开始拖动时获得通知,只需使用您指出的另一个代理: - (void) mapView:(GMSM

我正在使用
googlemapsdk6.1
进行开发。我想知道用户何时开始拖动或停止拖动地图,我刚刚找到了两个委托函数:
didChangeCameraPosition
idleAtCameraPosition
。是否有方法捕获用户何时开始或停止拖动地图?

从:

当地图处于空闲状态时,在完成任何未完成的手势或动画后(或在明确设置相机后)调用

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

要在用户确实开始拖动时获得通知,只需使用您指出的另一个代理:

- (void) mapView:(GMSMapView *)mapView didChangeCameraPosition:(GMSCameraPosition *)position 
在任何动画或地图上的手势期间重复调用(或一次,如果相机已明确设置)

这可能不是所有中间摄像机位置都需要的。它总是用于动画或手势的最终位置


我不知道是什么让你困惑。

当心idleAtCameraPosition是地图停止移动时,而不是你抬起手指时

我必须将GSMapView子类化,并添加PangestureRecognitor>>当手指抬起时,状态结束


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

Obj-C

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

func mapView(_ mapView: GMSMapView, willMove gesture: Bool)
并检查
手势
参数是否为



如前所述,多次调用了didChangeCameraPosition,但由于它也是通过从代码中设置地图中心来调用的,并且作为手势的结果,您无法单独看到该方法的区别。

Swift 4:

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

Swift 5.1

func mapView(_ mapView: GMSMapView, willMove gesture: Bool) 
此方法仅在地图视图拖动开始时调用,因此它无助于获取新坐标

通过对GoogleAPI和其他方法的分析,我没有得到正确的方法。对于这个问题,最好的、甜蜜的回答是使用平移手势

将平移手势添加到地图视图中,如下所示:

self.mapView.settings.consumesGesturesInView = false
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(self. panHandler(_:)))
self.mapView.addGestureRecognizer(panGesture)
pan手势方法的as实现

@objc private func panHandler(_ pan : UIPanGestureRecognizer){

        if pan.state == .ended{
            let mapSize = self.mapView.frame.size
            let point = CGPoint(x: mapSize.width/2, y: mapSize.height/2)
            let newCoordinate = self.mapView.projection.coordinate(for: point)
            print(newCoordinate)
             //do task here
        }
}

我有和龙舌兰托木斯克一样的问题,但你的答案是我们可以从谷歌sdk库类文件中知道的,你只是从中复制并粘贴到这里。我们想要的是另一种方法。这正是我一直在寻找的:)…在我查看文档时没有注意到手势参数是bool这应该标记为已接受,因为只有当用户拖动地图以更改相机时,手势才为真,否则,如果通过编程手势变量显式更改相机,则手势为假。这里的问题是,缩放手势也会触发此方法,并使用手势=是。我猜您可以说,当您在地图上使用两个手指时,缩放操作也是一种拖动操作,事实并非如此当您以编程方式调用zoom MethodsHank you got I solution(缩放方法)时,使用
signate=YES
触发@赛菲
@objc private func panHandler(_ pan : UIPanGestureRecognizer){

        if pan.state == .ended{
            let mapSize = self.mapView.frame.size
            let point = CGPoint(x: mapSize.width/2, y: mapSize.height/2)
            let newCoordinate = self.mapView.projection.coordinate(for: point)
            print(newCoordinate)
             //do task here
        }
}