2014-10-15 13 views
6

Sto cercando di scoprire come sovrapporre un'immagine su una mappa IOS usando SWIFT. Ho creato il seguente codice che si sovrappone a un cerchio verde su una mappa utilizzando il kit di mappe. Voglio sostituire il cerchio verde con l'immagine rettangolare tOver.png 500,500 Sono nuovo nello sviluppo di iOS e veloce. Finora non riesco a trovare un esempio rapido o una buona risorsa.Come sovrapporre un'immagine su una mappa IOS usando 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. 
    } 

} 

risposta

3

Come spiegato da Totem, sarebbe più semplice utilizzare un'annotazione immagine invece di una sovrapposizione se ciò è adatto ai propri scopi. Potrebbe non funzionare a seconda di cosa si desidera utilizzare questa immagine, tuttavia. La principale differenza tra gli overlay delle mappe e le annotazioni delle mappe è che le annotazioni rimangono della stessa dimensione quando si esegue lo zoom della mappa (come un pin) e le sovrapposizioni cambiano con le dimensioni della mappa (come la marcatura di un edificio). Se vuoi far ingrandire la tua immagine con la mappa, diventa un po 'più complicata.

Si vorrà creare una sottoclasse MKOverlayRenderer per disegnare l'immagine. È necessario disegnare l'immagine nel contesto dell'immagine per sottoclasse della funzione drawMapRect (mapRect, zoomScale, inContext). Dopo aver creato questa sottoclasse, puoi semplicemente sostituire la sottoclasse personalizzata al posto di MKCircleRenderer e dovresti andare.

C'è una bella recensione su Raywenderlich.com, che dovresti assolutamente controllare. Dovrebbe guidarti attraverso tutto ciò che devi sapere.