2016-09-18 2 views
0

Ich verwende MKMapSnapShotter, aber wenn ich einen Unterbrechungspunkt auf return finalImage setze, kann ich sehen, der Wert ist nur ein leeres ObjectiveC.NSObject, anstelle von UIImage.Warum ist mein UIImage in Swift nicht korrekt eingestellt?

func getIMG() -> UIImage{ 
     var finalImage = UIImage(); 
     let imageOptions = MKMapSnapshotOptions(); 
     imageOptions.region = mapView.region; 
     imageOptions.size = mapView.frame.size; 
     imageOptions.showsBuildings = true; 

     let imgMap = MKMapSnapshotter(options: imageOptions); 
     imgMap.start(completionHandler: { (imageObj: MKMapSnapshot?, Error) -> Void in 
      if(Error != nil){ 
       print("\(Error)"); 
      }else{ 
       finalImage = imageObj!.image; 
      } 

     }); 

     return finalImage; 

    } 

Meine Karte lädt korrekt, usw., so dass das Problem hier sein muss. Was ist der schnellste und einfachste Weg, um das Bild zu Testzwecken anzuzeigen? (Ich möchte nicht ein ImageView usw. entwerfen müssen, nur um das erzeugte Bild zu sehen).

Prost

UPDATE:

func getIMG(completion: @escaping (UIImage)->()){ 
     var finalImage = UIImage(); 
     let imageOptions = MKMapSnapshotOptions(); 
     imageOptions.region = mapView.region; 
     imageOptions.size = mapView.frame.size; 
     imageOptions.showsBuildings = true; 

     let imgMap = MKMapSnapshotter(options: imageOptions); 
     imgMap.start(completionHandler: { (imageObj: MKMapSnapshot?, Error) -> Void in 
      if(Error != nil){ 
       print("\(Error)"); 
      }else{ 
       finalImage = imageObj!.image; 
      } 
      completion(finalImage); 

     }); 

    } 

-

map.getMapAsIMG{ (image) in 
     print(image); 
    }; 

Hinweis: Compiler benötigt mich @escape verwenden ...

Antwort

3

Sie können nicht aus der Funktion zurück, die verwenden Schließung, so verwenden Sie auch Schließung mit Ihrer Funktion.

func getIMG(completion: (UIImage) ->()) { 

    var finalImage = UIImage(); 
    let imageOptions = MKMapSnapshotOptions(); 
    imageOptions.region = mapView.region; 
    imageOptions.size = mapView.frame.size; 
    imageOptions.showsBuildings = true; 

    let imgMap = MKMapSnapshotter(options: imageOptions); 
    imgMap.start(completionHandler: { (imageObj: MKMapSnapshot?, error) -> Void in 
     if(error != nil){ 
      print("\(Error)"); 
     }else{ 
      finalImage = imageObj!.image; 
     } 
     completion(finalImage) 
    }); 
} 

Jetzt diese Funktion wie folgt aufrufen.

self.getIMG { (image) in 
    //Access the image object 
} 
+0

Das macht eine Menge Sinn, werde jetzt experimentieren und werde zu Ihnen zurückkommen. Prost –

+0

auch, auch wenn ich einen Breakpoint auf 'finalImage = imageObj! .image;' den Wert immer noch als leeres NSObject ... sicher, das bedeutet, es gibt noch ein weiteres Problem mit der Unylering? –

+0

Haben Sie es mit dem Verschluss versucht? –

Verwandte Themen