Наложение перевернутого круга на карте (MapKit, MKOverlay, Swift)

Я пытаюсь добавить собственное наложение на вид карты для создания перевернутого круга (а не обычного наложения MKCircle вокруг булавки на карте). Я пробовал следовать этой теме: Добавить наложение перевернутого круга на вид карты

Я не создал пользовательский подкласс MKOverlay, но я создал собственный подкласс MKOverlayRenderer, который я пытаюсь использовать с MKCircle в качестве MKOverlay.

class MKInvertedCircleRenderer: MKOverlayRenderer {
var fillColor: UIColor = UIColor.blue

override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in context: CGContext) {
    let path = UIBezierPath(rect: CGRect(x: mapRect.origin.x, y: mapRect.origin.y, width: mapRect.size.width, height: mapRect.size.height))

    context.setFillColor(fillColor.cgColor)
    context.addPath(path.cgPath)
    context.fillPath()
}}

И это мой вызов делегата mapView в моем контроллере вида:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    switch(overlaySegmentedControl.selectedSegmentIndex) {
    case 0: // Draw circle on map view for region specified for "When I Arrive".
        let circleRenderer = MKCircleRenderer(overlay: overlay)
        circleRenderer.strokeColor = self.view.tintColor
        circleRenderer.lineWidth = 3.0
        circleRenderer.fillColor = self.view.tintColor.withAlphaComponent(0.15)

        return circleRenderer

    case 1: // Draw rectangle with circle cutout on map view for region specified for "When I Leave".
        let circleRenderer = MKInvertedCircleRenderer(overlay: overlay)

        return circleRenderer

    default:
        fatalError("Unspecified segmented control selected: \(overlaySegmentedControl.selectedSegmentIndex)")
    }
}

В настоящее время случай 0 работает, как и ожидалось, выводя наложение круга вокруг булавки на виде карты.

Случай 1 не работает, я ожидал, что он нарисует прямоугольник на карте, заполненный моим набором fillColor в подклассе MKOverlayRenderer - однако ничего не появляется. Я пытаюсь устранить эту проблему, прежде чем добавить путь, чтобы вырезать круг в середине.

Любая помощь будет оценена!

1 ответ

Оказывается, вы не можете использовать MKCircle с пользовательским подклассом MKOverlayRenderer.

Вы должны создать свой собственный подкласс MKOverlay для работы с пользовательским подклассом MKOverlayRenderer.

Другие вопросы по тегам