我使用的是MKMapSnapShotter
,但是当我在return finalImage
上设置断点时,我可以看到值只是一个空的ObjectiveC.NSObject
,而不是UIImage
。
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;
}
我的地图加载正确等等,所以问题一定在这里。另外,为了测试目的,查看图像的最快和最简单的方法是什么?(我不想设计一个imageView等,只为了看到它生成的图像)。
干杯
更新:
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);
};
注意:编译器需要我使用@escape。。。
最佳答案
不能从使用闭包的函数返回,因此也可以将闭包与函数一起使用。
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)
});
}
现在像这样调用这个函数。
self.getIMG { (image) in
//Access the image object
}