iOS GMSMapView初始加载背景色修改问题咨询
解决GMSMapView加载时棕褐色背景闪烁的问题
我之前在做深色模式下的Google Maps集成时,也碰到过一模一样的问题——那个棕褐色的初始背景闪一下真的很破坏体验!下面是我试过的几个有效方案,你可以根据自己的情况选择:
方案1:直接修改GMSMapView的背景色
这是最直接的方法,初始化GMSMapView的时候,立刻把它的背景色设置成你的应用背景(比如黑色):
let mapView = GMSMapView(frame: view.bounds) mapView.backgroundColor = .black // 替换成你的应用背景色 view.addSubview(mapView)
如果是用Interface Builder创建的mapView,直接在IB的属性面板里把Background改成黑色就行,不用等代码运行再设置,这样能更早覆盖初始的棕褐色。
方案2:添加临时覆盖视图(彻底消除闪烁)
如果方案1还是有轻微闪烁(比如地图样式加载需要一点时间),可以给mapView加一个临时的覆盖层,等地图完全渲染好再隐藏:
- 先创建一个和mapView同大小的UIView,背景色设为黑色:
let loadingOverlay = UIView(frame: mapView.bounds) loadingOverlay.backgroundColor = .black loadingOverlay.tag = 999 mapView.addSubview(loadingOverlay)
- 遵守
GMSMapViewDelegate,实现mapViewDidFinishTileRendering方法,在地图完成渲染时移除或隐藏覆盖层:
func mapViewDidFinishTileRendering(_ mapView: GMSMapView) { if let overlay = mapView.viewWithTag(999) { UIView.animate(withDuration: 0.2) { overlay.alpha = 0 } completion: { _ in overlay.removeFromSuperview() } } }
记得给mapView设置delegate = self哦。
方案3:提前加载自定义地图样式
如果你的深色样式是从JSON文件加载的,别等到mapView初始化之后再去解析加载,提前把样式准备好,初始化时直接设置:
// 提前在合适的地方(比如viewDidLoad之前)加载样式 guard let styleURL = Bundle.main.url(forResource: "darkMapStyle", withExtension: "json") else { fatalError("找不到地图样式文件") } let mapStyle = try! GMSMapStyle(contentsOfFileURL: styleURL) // 初始化mapView时直接设置 let mapView = GMSMapView(frame: view.bounds) mapView.mapStyle = mapStyle mapView.backgroundColor = .black
这样地图加载时会更快应用深色样式,减少棕褐色背景的显示时间。
这些方法我都试过,方案2是最彻底的,完全看不到闪烁;方案1最简单,大部分情况下也能解决问题。你可以先试试方案1,如果还有闪烁再用方案2~
内容的提问来源于stack exchange,提问作者T.Okahara
相关产品推荐
相关产品推荐

