如何确定 Google Maps Tiles 是不是已加载

Posted

技术标签:

【中文标题】如何确定 Google Maps Tiles 是不是已加载【英文标题】:How to Determine if Google Maps Tiles have Loaded如何确定 Google Maps Tiles 是否已加载 【发布时间】:2015-01-29 03:02:34 【问题描述】:

我在我的 ios 应用程序中使用 Google Maps API。在会话结束时,地图会缩小并捕获屏幕截图。不幸的是,目前地图通常没有时间在截取屏幕截图之前加载所有通过缩放暴露的图块。

我看到 Apple 的 MKMapView 有一个 mapViewDidFinishLoadingMap 代表。 Google API 中是否提供了类似的东西?

【问题讨论】:

【参考方案1】:

Google Maps SDK for iOS 有一个名为 mapViewDidFinishTileRendering 的方法,当地图完成渲染时会调用该方法。

-(void)mapViewDidFinishTileRendering:(GMSMapView *)mapView
    //TAKE THE SCREENSHOT HERE

另外,别忘了设置委托。

【讨论】:

【参考方案2】:

iOS SDK 有一个功能ma​​pViewSnapshotReady可以使用引用协议GMSMapViewDelegate

参考说明:

地图稳定时调用(瓦片加载、标签渲染、相机空闲) 并且覆盖对象已被渲染。

 func mapViewSnapshotReady(_ mapView: GMSMapView) 
        // map ready to use
 

【讨论】:

【参考方案3】:

在 Google Maps javascript API 中,您可以为 various UI events 使用事件侦听器,例如 tilesloaded 事件。

但是,Google Maps iOS SDK 没有任何事件侦听器。您必须使用 GMSMapViewDelegate 委托方法来检测 UI 事件。对于您的情况,我认为mapView:idleAtCameraPosition: 可能会对您有所帮助。

【讨论】:

在地图缩放到适当比例后,我已经在使用这种方法来捕获屏幕截图。不幸的是,这不包括更新地图图块,我想知道是否真的有专门用于加载图块的替代方法。 Google Maps Javascript API 有 tilesloaded UI 事件,但在 iOS SDK 中没有。 嗯,太糟糕了。尽管如此,还是感谢您提供的信息。

以上是关于如何确定 Google Maps Tiles 是不是已加载的主要内容,如果未能解决你的问题,请参考以下文章

如何知道用户是不是更改缩放(Google Maps V3)

如何检查是不是已加载 Google Maps API?

Google Maps Places:如何检查所选地点是不是在特定城镇?

v3 Google Maps Geocoding API 是不是有代表准确性的字段?

从 Google Maps API 中的单个 LatLong 确定缩放级别

Google Maps Android API V2 检查 Google Maps 应用程序是不是被禁用