マップビューに2つのポリゴンオーバーレイを描きます。奇妙なことは、ポリゴンの線は常に描画されますが、ほとんどの場合、ポリゴンは塗りつぶされません。MKPolygonRendererがポリゴンを塗りつぶすことはありません(ほとんどの場合)
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
}
}
を私は使用してポリゴンを描画する場合:時には彼らは、私は次のようなコードに見えるのiOS 9.3 & 10をターゲットに、スウィフト3を使用しています
...私は彼らがあることを期待するように、あるが私自身のLisFieldPolygonクラスの代わりにMKPolygonを使用すると、同じ結果が得られます。アウトラインですが、(ほとんどの場合は)塗りつぶされません。
これは私を困惑させます...私が間違っていることは私には分かりません。特にコードは私が見つけた同様の例のように見えます。私は何かをリフレッシュする必要がありますか?私は何かを登録したり、何かを特定の順序で入れたりするのを忘れましたか?
結果は、内部マップ、サテライトビュー、またはOSMマップ(MKTileOverlayを使用)に関係なく結果は同じです。
PS:MKCircleはちょうどいいです。一貫して