2016-04-08 5 views
0

Ich versuche, ein Kreis-Overlay zu meiner Karte hinzuzufügen. Ich folgte den Apple Docs und kam so weit, aber das Overlay erscheint nicht, wenn ich die App starte. Hier ist mein Code ...MapKit Overlay erscheint nicht

@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. 
} 

Ich unterrichte mir all diese Sachen, also vergib mir, wenn ich einen offensichtlichen Fehler gemacht habe.

Antwort

3

die akzeptierte Antwort auf diese Frage finden: How to create MKCircle in Swift?

Schritte sind:

  1. Stellen Sie sicher, dieser Controller implementiert MKMapViewDelegate:

    class YourViewController: UIViewController, MKMapViewDelegate 
    
  2. In viewDidLoad auf der Karte die Delegierten auf Selbst:

    override func viewDidLoad() { 
    super.viewDidLoad() 
    map.delegate = self;` 
    
  3. Fügen Sie die folgende Funktion, um die Überlagerung (die Farbe, usw.) zu machen:

    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. Der Radius des Kreises ist zu groß, als es zur Zeit gesetzt wird und die ganze Karte blau sein . Setze es auf etwas Kleines wie 1000, damit du den Kreis sehen kannst.

+0

Dank. map.delegate = Selbst was ich vermisst habe. – user3915477

0

objc in einer Klasse, die als mkmapviewdelegate gesetzt:

- (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]; 
}