我放置了一个按钮,以便在给定点上添加一个圆形叠加层。但是我不知道为什么,但是当区域没有改变时,我的覆盖图看不到。
我找不到刷新或重新加载地图的功能。因此,最终我决定稍微更改地图区域,以免打扰用户。 (例如,缩小一点。)
self.mapView.setRegion(mapView.region, animated: true)
我希望上面的代码不会更改地图区域,但是它确实会更改地图区域,
self.mapView.setRegion(MKCoordinateRegion(mapView.visibleMapRect), animated: true)
这也改变了地图的区域。
我该怎么办?
这就是我添加叠加层的方式
func addCircles() {
let center = self.myPinView.center
let origin = self.mapView.convert(center, toCoordinateFrom: mapView)
let overlay1 = MKCircle(center: origin, radius: 3)
let overlay2 = MKCircle(center: origin, radius: 7.5)
let overlay3 = MKCircle(center: origin, radius: 15)
self.mapView.addOverlay(overlay1)
self.mapView.addOverlay(overlay2)
self.mapView.addOverlay(overlay3)
}
这是我的代理函子
func mapView(_ mapView:MKMapView,rendererFor overlay:MKOverlay)-> MKOverlayRenderer {
if overlay is MKCircle {
let circle = MKCircleRenderer(overlay: overlay)
circle.fillColor = circle.fillColor = UIColor(red: 255, green: 0, blue: 0, alpha: 0.6)
circle.strokeColor = .red
return circle
} else {
return MKOverlayRenderer()
}
}
答案 0 :(得分:0)
尝试将它们封装在dsipatchQueue.main
DispatchQueue.main.async {
self.mapView.setRegion(mapView.region, animated: true)
}
答案 1 :(得分:0)
实际上,我用不同的观点解决了我的特殊问题。我最初的问题是,在用户选择位置后,我想画一个圆。但是,直到地图区域更改,我的叠加层才会出现。我试图立即画出这个圆圈。我找到的最用户友好的解决方案是将mapView中心设置为叠加层的中心。
self.mapView.setCenter(origin, animated: false)
这样,用户选择位置后,立即将地图焦点放在该位置并显示叠加层。