这是我的代码:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
// Don't want to show a custom image if the annotation is the user's location.
guard !(annotation is MKUserLocation) else {
return nil
}
// Better to make this class property
let annotationIdentifier = "AnnotationIdentifier"
var annotationView: MKAnnotationView?
if let dequeuedAnnotationView = mapView.dequeueReusableAnnotationView(withIdentifier: annotationIdentifier) {
annotationView = dequeuedAnnotationView
annotationView?.annotation = annotation
}
else {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier)
let btn = UIButton(type: .detailDisclosure)
btn.setImage(UIImage(named: "abc.png") , for: .normal)
annotationView?.rightCalloutAccessoryView = btn
}
if let annotationView = annotationView {
// Configure your annotation view here
annotationView.contentMode = .scaleAspectFit
annotationView.sizeThatFits(CGSize(width: 10, height: 10))
let url = URL(string: "abc url ")
let data = try? Data(contentsOf: url!)
let myPicture = UIImage(data: data!)
let thumb1 = myPicture?.resizeWith(percentage: 0.1)
annotationView.image = thumb1
}
return annotationView
}
但是它需要更多的时间来加载图像,最初也会在一点聚集图像?
请建议我如何在不创建自定义类的情况下将图片从网址加载到AnnotationView
自定义图片中。
提前致谢
答案 0 :(得分:1)
我没有完全相同的问题,但我需要从照片库中加载一系列图像作为调出图像。我解决这个问题的方法是让类以两个数组开头
class MyMapViewController: UIViewController, MKMapViewDelegate {
var urlArray = [url]()
var thumbnailArray = [UIImage]()
//and whatever vars and lets you need
override viewDidLoad() {
super.viewDidLoad()
thumbnailArray = getArrayOfThumbnails(from listOFURLs: urlArray)
//Now here set up your map view and create the annotations
}
函数getArrayOfThumbnails(来自listOfURLs :)可以在单独的类或视图控制器中创建,具体取决于您的应用程序以及模型包含的URL或图像。
func getArrayOfThumbnails(from listOfURLs: [url]) -> [UIImage] {
let imageRect = CGRect(x: 0, y: 0, width: 10, height: 10)
var returnThumbnails = [UIImage]()
var counter = 0
for url in listOfURLs {
let myImage = CIImage(contentOf: url)
returnTumbnails[counter] = UIImage(ciImage: myImage.cropping(to: imageRect)
}
return returnThumbnails
}
然后在地图视图委托方法中,您可以从准备好的缩略图数组中获取缩略图。由于我不知道选择哪个图像的标准是什么,我将缩略图放在一个数组中。但是,您也可以将它们放入字典中,并根据您使用特定注释选择正确图像的条件将它们从字典中删除。
在我的应用程序中,从照片库中取出图像变得非常快,并且不会阻塞UI。如果要从带宽较低的服务器加载大量图像,我会从与主队列不同的队列中调用getArrayOfThumbnails(来自listOfURLs :)以防止阻塞UI。您可能需要了解这与时间的关系。如果地图视图委托在函数getArrayOfThumbnails(来自listOfURLs :)之前调用缩略图数组返回结果,则最终可能没有图像。然后,您应该看看是否可以批量获取图像。
希望这有帮助。