2014-02-07 58 views
8

我希望能够检测用户是否缩小或移动地图中心。我已经看过有关事件监听器的帖子,但是在Javascript中,我试图查看Google Maps iOS SDK中是否有类似的东西。我看到iPad Yelp应用程序具有类似的功能,如果您放大/缩小或移动地图,工具栏将从底部显示,并让用户知道他们是否想要“重新搜索区域”。我想要做类似的事情,并用其他/更多的标记重新加载地图。是否有用于平移或缩放地图的Google Map事件侦听器?

我看过谷歌地图的参考指南,但遗憾的是还没有找到任何东西。如果任何人有类似的东西或有任何指导如何可以完成,任何信息将是伟大的。提前致谢!

链接到谷歌地图文档我已经看了看:

https://developers.google.com/maps/documentation/ios/reference/protocol_g_m_s_map_view_delegate-p

https://developers.google.com/maps/documentation/ios/reference/interface_g_m_s_coordinate_bounds

回答

9

我用这个委托检测相机的变化,其中包括缩放和位置:

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

编辑

与此代码,你可以得到分享范围区域的角落:

NSLog(@"%f,%f",_mapView.projection.visibleRegion.farLeft.latitude,_mapView.projection.visibleRegion.farLeft.longitude);//north west 
NSLog(@"%f,%f",_mapView.projection.visibleRegion.farRight.latitude,_mapView.projection.visibleRegion.farRight.longitude);//north east 
NSLog(@"%f,%f",_mapView.projection.visibleRegion.nearLeft.latitude,_mapView.projection.visibleRegion.nearLeft.longitude);//south west 
NSLog(@"%f,%f",_mapView.projection.visibleRegion.nearRight.latitude,_mapView.projection.visibleRegion.nearRight.longitude);//south east 
+0

令人惊叹!我如何使用它来检测相机或地图是否超出帧/边界/区域?我是否会创建自己的位置对象并查看两者是否相同?另外,如何获得右上角和左下角坐标? – Chris

+0

更新了我的回答 – allemattio

5

尝试委托方法- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture,该BOOL参数告诉你的MapView由用户移动或没有。

+0

谢谢!我如何检测用户是否已经离开某个特定区域。我有这些标记,并已设置地图显示所有的标记,并希望在离开此区域时重新加载新的标记。我知道谷歌地图有'GMSVisibleRegion',但不知道如何使用它与任何这些委托调用。有任何想法吗? – Chris

+0

@Chris,看起来你有两件事要做:第一是显示工具栏,第二是基于当前可见区域重新加载标记?如果是的话,我会在' - (void)mapView:(GMSMapView *)中显示工具栏mapView willMove:(BOOL)gesture'并在' - (void)mapView:(GMSMapView *)中重新加载标记mapView didChangeCameraPosition :(GMSCameraPosition * )position'。另外,'didChangeCameraPosition'委托将在移动过程中多次调用,您可能会在延迟期内重新加载标记。 –

1

检测移动/缩放结束Google Map view:

我遇到这个问题的同时寻求如何检测谷歌地图是以移动/缩放来获取地图的中心。正如Allemattio所建议的那样,我试图在didChangeCameraPosition中捕获这个事件,但是当我们平移或缩放地图时,这就是多次调用。幸运的是,我发现了另一个地图视图的代表方法,当我们结束了平移或缩放地图视图时,我们会调用该方法:

-(void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position 
{ 
     NSLog(@"mapView ended with panning/zooming in %s",__PRETTY_FUNCTION__); 
} 
+0

这是减少方法调用的最佳方法,因为didChangeCameraPosition多次调用soo!感谢名单 – Bishan

相关问题