Swift开发:如何移除追踪轨迹中的.person标记?
解决追踪应用更新轨迹时重复显示
.person标记的问题 你遇到的问题应该是每次更新在线轨迹时,都会重复添加或保留.person标记对吧?我给你两种针对性的解决方案,你可以根据需求选择:
方案一:完全移除.person标记(如果不需要再显示)
如果你的需求是不再展示这个人物标记,最直接的办法就是删掉添加标记的那行代码:
private func updateOnlineTrackOnMap() { let locations = self.track?.points?.map { $0.location } ?? [] guard locations.count >= 2 else { return } mapView.drawPolyline(withLocations: locations) // 移除下面这行代码,就不会再显示.person标记了 // mapView.setMark(.person, to: locations.last!.coordinate) }
方案二:更新标记时先移除旧标记(如果需要保留最新位置的标记)
如果你的需求是只显示当前最新位置的.person标记,避免重复叠加,那需要在设置新标记前先清除之前的旧标记。假设你的mapView支持按类型移除标记,可以这样修改:
private func updateOnlineTrackOnMap() { let locations = self.track?.points?.map { $0.location } ?? [] guard locations.count >= 2 else { return } mapView.drawPolyline(withLocations: locations) // 先移除已存在的.person标记 mapView.removeMark(ofType: .person) // 再添加最新位置的标记 mapView.setMark(.person, to: locations.last!.coordinate) }
如果你的mapView没有现成的按类型移除标记的方法,你可以自己维护一个标记引用:
// 在类内部声明一个属性保存标记引用 private var personMarker: Marker? // 这里Marker替换成你实际的标记类型 private func updateOnlineTrackOnMap() { let locations = self.track?.points?.map { $0.location } ?? [] guard locations.count >= 2 else { return } mapView.drawPolyline(withLocations: locations) // 移除旧标记 if let oldMarker = personMarker { mapView.removeMarker(oldMarker) } // 创建并保存新标记 personMarker = mapView.setMark(.person, to: locations.last!.coordinate) }
这样就能保证每次更新轨迹时,要么完全没有.person标记,要么只显示最新位置的那一个标记啦。
内容的提问来源于stack exchange,提问作者Max Kraev
相关产品推荐
相关产品推荐

