下载正确的图像后如何更新 MKPointAnnotation 图像?
How do I update an MKPointAnnotation image after downloading the right image?
我在地图上有一堆注释,它们都有自定义照片。有些照片可能还没有从 Firebase 下载到应用程序,所以如果它们没有可用的图像,它默认为白色圆圈图像并启动下载。下载完成后,它不会设置新图像。我该怎么做?
这是一些代码:
func generateAnnotations() {
for photo in photos {
let annotation = DetailPhotoPointAnnotation()
let latitude = photo.latitude
let longitude = photo.longitude
annotation.coordinate.latitude = latitude
annotation.coordinate.longitude = longitude
if photo.image != nil {
annotation.image = photo.image
} else {
annotation.image = #imageLiteral(resourceName: "whiteCircle")
let path = getDocumentsDirectory().appendingPathComponent(photo.uid)
if let image = UIImage(contentsOfFile: path) {
annotation.image = image
} else {
let ref = FIRStorage.storage().reference(forURL: photo.imageUrl)
ref.data(withMaxSize: 5*1024*1024, completion: { (data, error) in
if error != nil {
print(error!)
} else {
if let imageData = data {
if let image = UIImage(data: imageData) {
photo.assignImage(image: image)
annotation.image = image
}
}
}
})
}
}
self.coordinates.append(CLLocationCoordinate2DMake(latitude, longitude))
self.mapView.addAnnotation(annotation)
}
generateOverlay()
}
如您所见,它首先查看照片对象是否包含图像。如果没有,它会在文档目录中查找该图像。如果它不存在,它最终会下载它。有什么建议吗?
你需要做这样的事情。转到主线程。然后更新
DispatchQueue.main.async(execute: {
imageView.image = image
})
在我的 solution 中它有效。
希望这有帮助。
我在地图上有一堆注释,它们都有自定义照片。有些照片可能还没有从 Firebase 下载到应用程序,所以如果它们没有可用的图像,它默认为白色圆圈图像并启动下载。下载完成后,它不会设置新图像。我该怎么做?
这是一些代码:
func generateAnnotations() {
for photo in photos {
let annotation = DetailPhotoPointAnnotation()
let latitude = photo.latitude
let longitude = photo.longitude
annotation.coordinate.latitude = latitude
annotation.coordinate.longitude = longitude
if photo.image != nil {
annotation.image = photo.image
} else {
annotation.image = #imageLiteral(resourceName: "whiteCircle")
let path = getDocumentsDirectory().appendingPathComponent(photo.uid)
if let image = UIImage(contentsOfFile: path) {
annotation.image = image
} else {
let ref = FIRStorage.storage().reference(forURL: photo.imageUrl)
ref.data(withMaxSize: 5*1024*1024, completion: { (data, error) in
if error != nil {
print(error!)
} else {
if let imageData = data {
if let image = UIImage(data: imageData) {
photo.assignImage(image: image)
annotation.image = image
}
}
}
})
}
}
self.coordinates.append(CLLocationCoordinate2DMake(latitude, longitude))
self.mapView.addAnnotation(annotation)
}
generateOverlay()
}
如您所见,它首先查看照片对象是否包含图像。如果没有,它会在文档目录中查找该图像。如果它不存在,它最终会下载它。有什么建议吗?
你需要做这样的事情。转到主线程。然后更新
DispatchQueue.main.async(execute: {
imageView.image = image
})
在我的 solution 中它有效。 希望这有帮助。