在极少数情况下,地图上的叠加层(小蓝点)会产生奇怪的眩光(右侧的大蓝色区域)(如图所示)。有时放大或缩小会修复它,但并非总是如此。找不到任何关于为什么会这样的事情。它与渲染方式有关吗?
func drawLocations(_ loc: CLLocation)
{
let center = CLLocationCoordinate2D(latitude: loc.coordinate.latitude, longitude: loc.coordinate.longitude)
let lat: CLLocationDegrees = center.latitude
let long: CLLocationDegrees = center.longitude
var points = [CLLocationCoordinate2DMake(lat,long),CLLocationCoordinate2DMake(lat,long),CLLocationCoordinate2DMake(lat,long),CLLocationCoordinate2DMake(lat,long)]
let polygon = MKPolygon(coordinates: &points, count: points.count)
DispatchQueue.main.async(execute: {
self.mapView.add(polygon)
})
}
func mapView(_ mapView: MKMapView!, rendererFor overlay: MKOverlay!) -> MKOverlayRenderer!
{
if overlay is MKPolygon
{
let polygonView = MKPolygonRenderer(overlay: overlay)
polygonView.lineWidth = 4
polygonView.strokeColor = UIColor(red: 30/255.0, green: 12/255.0, blue: 242/255.0, alpha: 0.4)
return polygonView
}
return nil
}
答案 0 :(得分:1)
看起来您使用的是 MKPolygon
,即使您只绘制一个点,具有相同的纬度和经度。我认为对单个点使用 MKCircle
会更好。
func drawLocation(_ loc: CLLocation)
{
let center = CLLocationCoordinate2D(latitude: loc.coordinate.latitude, longitude: loc.coordinate.longitude)
let circle = MKCircle(center: center, radius: 4)
DispatchQueue.main.async(execute: {
self.mapView.add(circle)
})
}
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer
{
if overlay is MKCircle
{
let circleView = MKCircleRenderer(circle: overlay)
circleView.lineWidth = 4
circleView.strokeColor = UIColor(red: 30/255.0, green: 12/255.0, blue: 242/255.0, alpha: 0.4)
return circleView
}
return nil
}
正如您所说,放大和缩小功能可能会导致此故障,因为放大时的点可能看起来更像多边形,而缩小时渲染器仍然有多边形伪影,但现在只渲染一个单坐标。
通常最好使用多边形来渲染间隔更远的点,这有助于渲染器,因为地图是逐块渲染的,这使得区分多边形中的点变得容易。对于非常靠近的多个点,我们可以考虑将它们分组以使用更大的半径 MKCircle
。您还可以考虑将 isZoomEnabled
的 false
设置为 MKMapView
,并在所需的缩放级别设置固定的 MKCoordinateRegion
以避免这些渲染伪影。
答案 1 :(得分:0)
要删除此错误,只有解决方案才会切换到Google地图,因为该错误与iOS 10+相关联。 您可以向Apple Bug Reporting报告此错误: https://developer.apple.com/bug-reporting/