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
}
}