Swift中MKMapView绘制PolyLine时线条变粗问题求助
解决MKPolyLine路线线条粗细不一致的问题
嘿,我来帮你搞定这个路线越画越粗的问题!从你的代码来看,大概率是重复添加了PolyLine覆盖层导致的——每次调用mapp()方法时,旧的路线没有被移除,新的路线又叠加上去,重叠的部分自然就看起来更粗了。
问题根源分析
你的assigArray()方法里没有清空coordinateArray,如果这个方法被多次调用,数组里会不断累加之前的坐标点;同时mapp()方法也没有移除地图上已有的PolyLine,导致每次新增的路线都是包含所有历史点的新线,多层叠加后视觉上就变粗了。
修复方案
我们需要做两个关键修改:
1. 填充坐标数组前先清空
在assigArray()开头添加清空数组的代码,避免坐标点重复累加:
func assigArray() { // 先清空坐标数组,确保每次都是全新的路线点集合 coordinateArray.removeAll() if self.lat.count == self.lon.count { for i in 0 ..< self.lat.count { let destination = CLLocationCoordinate2DMake(self.lat[i], self.lon[i]) coordinateArray.append(destination) } self.mapp() } }
2. 添加新路线前移除旧的PolyLine覆盖层
在mapp()方法开头,先移除地图上已有的所有PolyLine,保证地图上始终只有一条路线:
func mapp() { // 移除所有已存在的PolyLine覆盖层 map.overlays.forEach { overlay in if overlay is MKPolyline { map.removeOverlay(overlay) } } let coords2 = CLLocationCoordinate2D(latitude: lat.last!, longitude: lon.last!) let testline = MKPolyline(coordinates: coordinateArray, count: coordinateArray.count) map.add(testline) map.delegate = self map.centerCoordinate = coords2 map.region = MKCoordinateRegion(center: coords2, span: MKCoordinateSpan(latitudeDelta: 0.02, longitudeDelta: 0.02)) }
额外提示
你的map.delegate = self最好放到视图初始化的地方(比如viewDidLoad),不需要每次调用mapp()都设置一遍,避免重复设置可能带来的潜在问题。
这样修改后,每次更新路线时都会先清理旧数据,只显示最新的一条PolyLine,整条路线的粗细就会保持统一的2.0啦!
内容的提问来源于stack exchange,提问作者Yash R
相关产品推荐
相关产品推荐

