gpt4 book ai didi

swift - 使用 SDWebimage 下载并缓存 MKMapSnapshotter 图像

转载 作者:可可西里 更新时间:2023-11-01 01:49:26 34 4
gpt4 key购买 nike

我想在 UITableViewCells 中显示 mapView,

所以我实际上写了这段代码


class DataPointTableCell: UITableViewCell {

@IBOutlet weak var mapView: MKMapView!

func addAnnotaionToMapView(_ coordinates: Coordinate) {
removePreviousCoordinate()

let viewCoorindate = CLLocationCoordinate2D(latitude: coordinates.latitude, longitude: coordinates.longitude)
let annotation = MKPointAnnotation()
annotation.coordinate = viewCoorindate

mapView.addAnnotation(annotation)
// animate is turned to false on purpose.
mapView.animateToPoint(viewCoorindate, animated: false)
}

private func removePreviousCoordinate() {
let annotations = self.mapView.annotations
self.mapView.removeAnnotations(annotations)
}
}

这种方法的问题是它为 mapView 位置设置动画,然后在它对单元格进行双端队列时添加标记。

我采用了另一种方法,即使用 MKMapSnapshotter

private func setMapImage() {
let rect = self.mapImageView.bounds

let mapSnapshotOptions = MKMapSnapshotter.Options()

// Set the region of the map that is rendered.
let needleLocation = CLLocationCoordinate2DMake(15.4952364, 73.8343293)
let region = MKCoordinateRegion(center: needleLocation, latitudinalMeters: 1000, longitudinalMeters: 1000)
mapSnapshotOptions.region = region

// Set the scale of the image. We'll just use the scale of the current device, which is 2x scale on Retina screens.
mapSnapshotOptions.scale = UIScreen.main.scale

// Set the size of the image output.
mapSnapshotOptions.size = CGSize(width: 300, height: 300)

// Show buildings and Points of Interest on the snapshot
mapSnapshotOptions.showsBuildings = true
mapSnapshotOptions.showsPointsOfInterest = false

let snapshot = MKMapSnapshotter(options: mapSnapshotOptions)
snapshot.start { snapshot, error in
guard let snapshot = snapshot, error == nil else {
print("\(error!.localizedDescription)")
return
}

UIGraphicsBeginImageContextWithOptions(mapSnapshotOptions.size, true, 0)
snapshot.image.draw(at: .zero)

let pinView = MKPinAnnotationView(annotation: nil, reuseIdentifier: nil)
let pinImage = pinView.image

var point = snapshot.point(for: needleLocation)

if rect.contains(point) {
let pinCenterOffset = pinView.centerOffset
point.x -= pinView.bounds.size.width / 2
point.y -= pinView.bounds.size.height / 2
point.x += pinCenterOffset.x
point.y += pinCenterOffset.y
pinImage?.draw(at: point)
}

let image = UIGraphicsGetImageFromCurrentImageContext()

UIGraphicsEndImageContext()

DispatchQueue.main.async {
self.mapImageView.image = image
}
}
}

这工作正常,但我无法缓存基于任何内容的图像。

所以我想要的帮助是如何使用 SDWebimage 下载和缓存 mapImage .

最佳答案

首先为你的手机添加一个唯一的键

var youUniqueCellKey = "Key"

然后在 setMapImage 中首先检查图像是否已经缓存并将其分配给您的 mapImageView

private func setMapImage() {

if let image = SDImageCache.shared().imageFromCache(forKey: youUniqueCellKey) {
self.mapImageView.image = image
} else {
// Add your rest of your code here

// At the end
var imageToStore = UIImage() // Your mapImage

SDImageCache.shared().store(imageToStore, forKey: youUniqueCellKey, completion: nil)
}
}

关于swift - 使用 SDWebimage 下载并缓存 MKMapSnapshotter 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55719933/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com