2

My code correctly gets an image and provides the bounds for the mapView. I want to put the image within the bounds but I am not sure how. I am able to fill it with a color but I need help making it an image.

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    let renderer = MKPolygonRenderer(overlay: overlay)
    //renderer.fillColor = UIColor.red -> works
    return renderer
}

How can I fill it with this image that I downloaded?https://radar.weather.gov/ridge/Conus/RadarImg/latest_radaronly.gif

AamirR
  • 11,672
  • 4
  • 59
  • 73

1 Answers1

2

Using this subclass of MKOverlayRenderer you will be able to render UIImage overlay on the actual MKPolygon

class CustomOverlayRenderer: MKOverlayRenderer  {

    private let overlayImage: UIImage?

    init(overlay: MKOverlay, image: UIImage? = nil) {
        self.overlayImage = image
        super.init(overlay: overlay)
    }

    override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in context: CGContext) {
        guard let cgImage = self.overlayImage?.cgImage else { return }

        let rect = self.rect(for: overlay.boundingMapRect)

        context.scaleBy(x: 1.0, y: -1.0)
        context.translateBy(x: 0, y: -rect.height)
        context.draw(cgImage, in: rect)
    }

}

Just change your delegate method to this use CustomOverlayRenderer, like so:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    return CustomOverlayRenderer(overlay: overlay, image: UIImage(named: "latest_radaronly.gif")!)
}
AamirR
  • 11,672
  • 4
  • 59
  • 73