3

I'm trying to add a circle overlay to my map. I followed the apple docs and got this far, but the overlay doesn't appear when I run the app. Here's my code...

@IBOutlet var map: MKMapView!
let location = CLLocationCoordinate2DMake(40.73085, -73.99750)
let regionRadius: CLLocationDistance = 5500

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
    let diskRenderer: MKCircleRenderer = MKCircleRenderer.init()
    diskRenderer.fillColor = UIColor.init(red: 0, green: 192, blue: 295, alpha: 1)
    return diskRenderer
}

override func viewDidLoad() {
    super.viewDidLoad()

    let coordinateRegion = MKCoordinateRegionMakeWithDistance(location, regionRadius, regionRadius)
    map.setRegion(coordinateRegion, animated: true)
    let diskOverlay: MKCircle = MKCircle.init(centerCoordinate: location, radius: 5000)
    map.addOverlay(diskOverlay)

    // Do any additional setup after loading the view.
}

I'm teaching myself all this stuff so forgive me if i've made an obvious mistake.

user3915477
  • 275
  • 4
  • 11

2 Answers2

7

See the accepted answer to this question: How to create MKCircle in Swift?

Steps are:

  1. Ensure this controller implements MKMapViewDelegate:

    class YourViewController: UIViewController, MKMapViewDelegate
    
  2. In viewDidLoad set the delegate on map to self:

    override func viewDidLoad() {
    super.viewDidLoad()
    map.delegate = self;`
    
  3. Add the following function to render the overlay (change the color, etc):

    func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
    if let overlay = overlay as? MKCircle {
        let circleRenderer = MKCircleRenderer(circle: overlay)
        circleRenderer.fillColor = UIColor.blueColor()
        return circleRenderer
    }
    else {
       return MKOverlayRenderer(overlay: overlay)
    }
    } 
    
  4. The radius of your circle is too big as it is currently set and the whole map will be blue. Set it to something small, like 1000, so you can see the circle.

Community
  • 1
  • 1
markwatsonatx
  • 3,391
  • 2
  • 21
  • 19
1

objc in a class that is set as a mkmapviewdelegate:

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id <MKOverlay>)overlay
{
    if ([overlay isKindOfClass:[MKPolygon class]]) {
        MKPolygon *polygon = (MKPolygon *)overlay;
        MKPolygonRenderer *renderer = [[MKPolygonRenderer alloc] initWithPolygon:polygon];
        renderer.strokeColor = [UIColor blueColor];
        renderer.lineWidth = 5.;
        return renderer;
    }
    return [[MKOverlayRenderer alloc] initWithOverlay:overlay];
}
Anton Tropashko
  • 5,486
  • 5
  • 41
  • 66