Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios MKPolygonRenderer不填充多边形(大多数情况下)_Ios_Swift_Mapkit - Fatal编程技术网

Ios MKPolygonRenderer不填充多边形(大多数情况下)

Ios MKPolygonRenderer不填充多边形(大多数情况下),ios,swift,mapkit,Ios,Swift,Mapkit,我正在地图视图上绘制两个多边形叠加。奇怪的是,虽然多边形线总是绘制的,但大多数情况下多边形都没有填充。虽然有时他们是,正如我所期望的那样 我正在使用Swift 3,目标是iOS 9.3和10。代码如下所示: func addPolygons() { for field in self.fields! { if field.polygon.count > 0 { let polygon = LisFieldPolygon(field: fiel

我正在地图视图上绘制两个多边形叠加。奇怪的是,虽然多边形线总是绘制的,但大多数情况下多边形都没有填充。虽然有时他们是,正如我所期望的那样

我正在使用Swift 3,目标是iOS 9.3和10。代码如下所示:

func addPolygons() {
    for field in self.fields! {
        if field.polygon.count > 0 {
            let polygon = LisFieldPolygon(field: field)
            self.mapView.add(polygon)
        }
    }
    // Add circle for location accuracy
    if (self.location != nil) {
        let circle = MKCircle(center: self.location!.coordinate, radius: self.location!.horizontalAccuracy)
        self.mapView.add(circle)
    }
}

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    switch overlay {
    case is MKPolygon:
        let polyView = MKPolygonRenderer(overlay: overlay)
        let color = UIColor.init(red: 0xf6/255, green: 0x81/255, blue: 0x3c/255, alpha: 1.0)
        polyView.strokeColor = color
        polyView.fillColor = color.withAlphaComponent(0.2)
        polyView.lineWidth = 1.0
        return polyView
    case is LisFieldPolygon:
        let lisOverlay = overlay as! LisFieldPolygon
        let polyView = MKPolygonRenderer(overlay: lisOverlay.polygon)
        let color: UIColor
        if lisOverlay.field.make.is_farmland {
            color = UIColor.init(red: 0x0e/255, green: 0xd5/255, blue: 0x1d/255, alpha: 1.0)
        } else {
            color = UIColor.init(red: 0xf6/255, green: 0x81/255, blue: 0x3c/255, alpha: 1.0)
        }
        polyView.fillColor = color // .withAlphaComponent(0.5)
        polyView.strokeColor = color
        polyView.lineWidth = 1.0
        return polyView
    case is MKCircle:
        let circleView = MKCircleRenderer(overlay: overlay)
        let color = UIColor(red: 0.1, green: 0.3, blue: 0.6, alpha: 1.0)
        circleView.strokeColor = color.withAlphaComponent(0.8)
        circleView.fillColor = color.withAlphaComponent(0.2)
        circleView.lineWidth = 1.0
        return circleView
    case is MKTileOverlay:
        let tileRenderer = MKTileOverlayRenderer(tileOverlay: self.tileOverlay!)
        return tileRenderer
    default:
        printError("LisMapViewController.mapView rendererForOverlay: Unexpected overlay")
        let lineView = MKPolylineRenderer(overlay: overlay)
        lineView.strokeColor = UIColor.red
        return lineView
    }
}
如果我使用MKPolygon而不是我自己的LisFieldPolygon类绘制多边形,我会得到相同的结果:一个轮廓,但是(大多数时候)没有填充

这让我困惑。。。我看不出我做错了什么,尤其是代码看起来像我发现的类似示例。我需要刷新一下吗?我是否错过了注册某些东西,将某些东西按特定顺序排列? (顺便说一句,问题与Swift 2.3相同)

无论使用内部地图、卫星视图还是OSM地图(使用MKTileOverlay),结果都是相同的


注:圆圈填得很好。始终如一。

好的,经过大量的调试和尝试,我终于找到了解决方案。 上面的代码工作正常。问题在于数据。多边形数据通过网络从DB同步。我犯了一个错误,没有删除坐标数组,只是一直添加坐标。这导致每个多边形都有多组坐标(基本上描述了原始多边形周围的多个圆)。这似乎会阻止正确填充多边形

如果我只有一组坐标,填充就可以正常工作。因此,如果其他人遇到类似问题,请仔细检查坐标数据;-)