【发布时间】:2020-09-14 21:23:12
【问题描述】:
我有这个功能
func getSnapshot(lat: Double, lon: Double) -> UIImage? {
let location = CLLocationCoordinate2DMake(37.332077, -37.332077)
let region = MKCoordinateRegion(center: location, latitudinalMeters: 1000, longitudinalMeters: 1000)
mapSnapshotOptions.region = region
print("a")
mapSnapshotOptions.scale = UIScreen.main.scale
mapSnapshotOptions.size = CGSize(width: 300, height: 300)
mapSnapshotOptions.showsBuildings = true
mapSnapshotOptions.showsPointsOfInterest = true
snapShotter = MKMapSnapshotter(options: mapSnapshotOptions)
print("b")
var newImage: UIImage?
self.snapShotter.start { (snapshot, error) -> Void in
print("c")
if error == nil {
let image = snapshot!.image.withRenderingMode(.alwaysOriginal)
var imageview = UIImageView(frame: CGRect(x: 30, y: 30, width: 300, height: 300))
var label = UILabel()
label.frame = CGRect(x: 0, y: 1, width: 30, height: 30)
label.textAlignment = .center
label.font = UIFont.boldSystemFont(ofSize: 12)
label.textColor = UIColor.gray
label.text = "my-text"
imageview.addSubview(label)
imageview.image = image
newImage = image
} else {
print("error")
}
}
print("d")
print(newImage)
return newImage
}
这应该返回我在snapShotter.start 闭包中设置的 UIImage。我写了一些打印语句来检查发生了什么,它打印a b d nil c,而我正在寻找的是打印a b c d (image)。
我尝试将闭包放在DispatchQueue.main.async 中,但我一直得到相同的结果。
有什么想法吗?
【问题讨论】:
-
这是最常见的问题之一:stackoverflow.com/questions/linked/25203556?lq=1。
标签: swift asynchronous closures