2014-10-15 12 views
6

überlagern Ich versuche herauszufinden, wie ein Bild auf einer IOS-Karte mit SWIFT überlagern. Ich habe den folgenden Code erstellt, der einen grünen Kreis auf einer Karte mit Map-Kit überlagert. Ich möchte den grünen Kreis durch das rechteckige Bild ersetzen tOver.png 500,500 Ich bin neu in iOS Entwicklung und zu schnell. Bis jetzt kann ich kein schnelles Beispiel oder eine gute Ressource finden.Wie ein Bild auf einer IOS-Karte mit swift

// 
// ViewController.swift 
// mapoverlaytest 
// 

import UIKit 
import MapKit 


class ViewController: UIViewController,MKMapViewDelegate { 
    @IBOutlet weak var mapView: MKMapView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.mapView.delegate = self; 
     let location = CLLocationCoordinate2D(
      latitude: 51.50007773, 
      longitude: -0.1246402 
     ) 

     let span = MKCoordinateSpanMake(0.05, 0.05) 
     let region = MKCoordinateRegion(center: location, span: span) 

     mapView.setRegion(region, animated: true) 

     let annotation = MKPointAnnotation() 
     annotation.setCoordinate(location) 
     annotation.title = "Big Ben" 
     annotation.subtitle = "London" 



     var overlay = MKCircle (centerCoordinate: location, radius: 500) 

     mapView.addOverlay(overlay) 

     mapView.addAnnotation(annotation) 

    } 

    func mapView(
     mapView: MKMapView!, rendererForOverlay 
     overlay: MKOverlay!) -> MKOverlayRenderer! { 
      if (overlay.isKindOfClass(MKCircle)) 
      { 
       var circleRenderer = MKCircleRenderer(overlay: overlay) 
       circleRenderer.strokeColor = UIColor.greenColor() 
       circleRenderer.fillColor = UIColor(
        red: 0, 
        green: 1.0, 
        blue: 0, 
        alpha: 0.5) 

       return circleRenderer 
      } 
      return nil 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 

Antwort

3

Wie Totem erklärt, wäre es einfacher, eine Bildannotation anstelle einer Überlagerung zu verwenden, wenn dies für Ihre Zwecke funktioniert. Je nachdem, für was Sie dieses Bild verwenden möchten, funktioniert es jedoch möglicherweise nicht. Der Hauptunterschied zwischen Kartenüberlagerungen und Kartenanmerkungen besteht darin, dass Anmerkungen beim Vergrößern der Karte die gleiche Größe behalten (wie bei einer Stecknadel) und sich Überlagerungen mit der Größe der Karte ändern (wie bei der Markierung eines Gebäudes). Wenn Ihr Bild mit der Karte zoomen soll, wird es etwas komplizierter.

Sie möchten eine neue MKOverlayRenderer-Unterklasse erstellen, um Ihr Bild zu zeichnen. Sie müssen das Bild selbst in den Bildkontext zeichnen, indem Sie die Funktion drawMapRect (mapRect, zoomScale, inContext) erstellen. Nachdem Sie diese Unterklasse erstellt haben, können Sie diese anstelle des MKCircleRenderer in Ihrer benutzerdefinierten Unterklasse ersetzen, und es sollte Ihnen gut gehen.

Es gibt eine sehr gute schreiben auf Raywenderlich.com, die Sie auf jeden Fall auschecken sollten. Es sollte Sie durch alles führen, was Sie wissen müssen.

Verwandte Themen