Наложение вокруг аннотации

Привет! Я пытаюсь создать оверлей вокруг своих аннотаций, например приложение напоминаний о яблоках. Я уже создал объект MKCircle, который, как мне кажется, следует использовать для отображения наложения, но как мне преобразовать мой объект MKCircle в объект MKOVerlay? может быть, есть лучший способ добавить аннотации? Я новичок в Swift и программировании. Какие-либо предложения?

1 ответ

Решение

MKCircle это MKOverlay объект. Вам просто нужно добавить его в качестве наложения:

let circle = MKCircle(center: coordinate, radius: 1000)
mapView.add(circle)

Конечно, вы должны указать карте, как ее визуализировать, реализовав mapView(_:rendererFor:) в вашем делегате и создать экземпляр MKCircleRenderer для MKCircle это прошло как наложение.

extension ViewController: MKMapViewDelegate {
    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        let renderer = MKCircleRenderer(overlay: overlay)
        renderer.fillColor = UIColor.cyan.withAlphaComponent(0.5)
        renderer.strokeColor = UIColor.cyan.withAlphaComponent(0.8)
        return renderer
    }
}

Ясно, что вы указали delegate для тебя MKMapView, тоже. И если у вас есть другие типы средств визуализации, вы можете реализовать специальную логику для них, например,

extension ViewController: MKMapViewDelegate {
    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        if let circle = overlay as? MKCircle {
            let renderer = MKCircleRenderer(circle: circle)
            renderer.fillColor = UIColor.cyan.withAlphaComponent(0.5)
            renderer.strokeColor = UIColor.cyan.withAlphaComponent(0.8)
            return renderer
        }

        if let polygon = overlay as? MKPolygon {
            let renderer = MKPolygonRenderer(polygon: polygon)
            renderer.fillColor = UIColor.blue.withAlphaComponent(0.5)
            renderer.strokeColor = UIColor.blue.withAlphaComponent(0.8)
            return renderer
        }

        if let polyline = overlay as? MKPolyline {
            let renderer = MKPolylineRenderer(polyline: polyline)
            renderer.fillColor = UIColor.red.withAlphaComponent(0.5)
            renderer.strokeColor = UIColor.red.withAlphaComponent(0.8)
            return renderer
        }

        fatalError("Unexpected overlay type")
    }
}
Другие вопросы по тегам