2015-07-11 11 views
5

Próbuję zrobić migawkę widoku ulicy lokalizacji przypięte w mojej aplikacji za pomocą MKSnapshotter. Obecnie mam ten kod:Jak wyświetlić MKSnapshot w Swift (iOS)?

var options: MKMapSnapshotOptions = MKMapSnapshotOptions(); 
    options.region = self.attractionDetailMap.region; 
    options.size = self.attractionDetailMap.frame.size; 
    options.scale = UIScreen.mainScreen().scale; 

    var fileURL:NSURL = NSURL(fileURLWithPath: "path/to/snapshot.png")!; 
    var snapshotter:MKMapSnapshotter = MKMapSnapshotter(); 
    snapshotter.startWithCompletionHandler { (snapshot:MKMapSnapshot!, error:NSError!) -> Void in 
     if(error != nil) { 
      println("error: " + error.localizedDescription); 
      return; 
     } 
     let image:UIImage = snapshot.image; 
     var data:NSData = UIImagePNGRepresentation(image); 
     data.writeToURL(fileURL, atomically: true); 

     var pin:MKAnnotationView = MKAnnotationView(); 
     UIGraphicsBeginImageContextWithOptions(image.size, true, image.scale); 
     image.drawAtPoint(CGPointMake(0.0, 0.0)); 
     var rect:CGRect = CGRectMake(0.0, 0.0, image.size.width, image.size.height); 
     for annotation in self.attractionDetailMap.annotations as! [MKAnnotation]{ 
      var point:CGPoint = snapshot.pointForCoordinate(annotation.coordinate); 
      if(CGRectContainsPoint(rect, point)) { 
       point.x = point.x + pin.centerOffset.x - (pin.bounds.size.width/2.0); 
       point.y = point.y + pin.centerOffset.y - (pin.bounds.size.height/2.0); 
       pin.image.drawAtPoint(point); 
      } 
     } 

     var compositeImage:UIImage = UIGraphicsGetImageFromCurrentImageContext(); 
     var data2:NSData = UIImagePNGRepresentation(compositeImage); 
     data.writeToURL(fileURL, atomically: true); 
     UIGraphicsEndImageContext(); 

Teraz, gdy mam obraz, nie wiem, jak wyświetlić migawkę do mojego widoku mapy.

Każda pomoc będzie bardzo ceniona!

Odpowiedz

0

Zatem klasa MKMapSnapshotter nie jest używana do wyświetlania wewnątrz widoku mapy. Zwraca tylko obraz mapy, która nie jest zgodna z widokiem mapy. Użyłem go, gdy potrzebuję dodatkowej wydajności, na przykład wyświetlania mapy z pinezką w komórce widoku tabeli lub widoku kolekcji. Działa to znacznie lepiej niż wyświetlanie rzeczywistego widoku mapy wewnątrz widoku tabeli.

Po utworzeniu migawki wystarczy załadować go do UIImageView. Wygląda jak widok mapy.