使用Google Maps SDK for iOS v2.6.0时地图标记缺失问题求助
问题解决:Google Maps iOS 标记不显示的原因及修复方案
嘿,我一眼就瞅出问题所在啦!你代码里的逻辑顺序搞反了,导致标记被“弄丢”了。
问题根源
你先创建了GMSMarker并把它关联到当前的mapView上,但紧接着你又重新初始化了一个全新的GMSMapView实例,还把当前的view替换成了这个新的地图视图。这就意味着,你之前添加了标记的那个旧mapView已经被丢弃了,新的地图视图里当然没有任何标记啦!
修正后的代码
你需要把创建地图视图的代码移到添加标记之前,或者确保只初始化一次地图视图。这里提供两种修复方式:
方式一:在addMarker中仅初始化一次地图视图
func addMarker(lat: Double, lng: Double) { // 只有当mapView还未初始化时,才创建新的地图视图 if mapView == nil { let camera = GMSCameraPosition.camera(withLatitude: lat, longitude: lng, zoom: 15.0) mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera) view = mapView } // 现在添加标记到已存在的mapView上 let marker = GMSMarker(position: CLLocationCoordinate2D(latitude: lat, longitude: lng)) marker.title = "Orlando" marker.snippet = "Florida" marker.map = mapView print("addMarker(lat:\(lat), lng:\(lng))") }
方式二:提前在viewDidLoad中初始化地图视图(更推荐)
如果你的地图视图应该在页面加载时就存在,那最好把初始化逻辑放到viewDidLoad里,addMarker只负责添加标记:
override func viewDidLoad() { super.viewDidLoad() // 初始化地图视图(这里用Orlando的默认坐标) let initialCamera = GMSCameraPosition.camera(withLatitude: 28.5383, longitude: -81.3792, zoom: 15.0) mapView = GMSMapView.map(withFrame: CGRect.zero, camera: initialCamera) view = mapView } func addMarker(lat: Double, lng: Double) { let marker = GMSMarker(position: CLLocationCoordinate2D(latitude: lat, longitude: lng)) marker.title = "Orlando" marker.snippet = "Florida" marker.map = mapView print("addMarker(lat:\(lat), lng:\(lng))") }
为什么这样改?
这样调整后,标记会被添加到同一个已显示在屏幕上的地图视图中,而不是被加到一个马上就被丢弃的临时地图实例里。你之前的打印语句能输出,说明函数确实执行了,但标记因为地图视图被替换而丢失了。
内容的提问来源于stack exchange,提问作者es0329
相关产品推荐
相关产品推荐

