Swift MKMapView多边形叠加小故障

时间:2016-11-29 18:30:03

标签: ios swift function mkmapview overlay

在极少数情况下,地图上的叠加层(小蓝点)会产生奇怪的眩光(右侧的大蓝色区域)(如图所示)。有时放大或缩小会修复它,但并非总是如此。找不到任何关于为什么会这样的事情。它与渲染方式有关吗?

enter image description here

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
    }

2 个答案:

答案 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。您还可以考虑将 isZoomEnabledfalse 设置为 MKMapView,并在所需的缩放级别设置固定的 MKCoordinateRegion 以避免这些渲染伪影。

答案 1 :(得分:0)

要删除此错误,只有解决方案才会切换到Google地图,因为该错误与iOS 10+相关联。 您可以向Apple Bug Reporting报告此错误: https://developer.apple.com/bug-reporting/