gpt4 book ai didi

uitableview - 在 UITableViewController 的每个单元格中,我都嵌入了 map 。有没有办法将其更改为 map 的屏幕截图?

转载 作者:行者123 更新时间:2023-12-04 15:41:48 24 4
gpt4 key购买 nike

在我的 ios swift应用程序我有一个 UITableViewController动态添加单元格。每个单元格都有一个 MKMapView嵌入,我正在为不同坐标上的每个单元格设置 map 的中心。我这样做是通过调用这个方法:

func centerMapOnLocation(location: CLLocation, map: MKMapView, radius: CLLocationDistance) {
let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate,
radius * 2.0, radius * 2.0)
map.setRegion(coordinateRegion, animated: true)
}

cellForRowAtIndexPath :
override func tableView(tview: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tview.dequeueReusableCellWithIdentifier("cell") as! SingleCall
let user:SingleUser = self.items[indexPath.row] as! SingleUser

let regionRadius: CLLocationDistance = 150
let initialLocation = CLLocation(latitude: user.coordinate.latitude, longitude: user.coordinate.longitude)

centerMapOnLocation(initialLocation, map: cell.eventMap, radius: regionRadius)

cell.eventMap.zoomEnabled = false
cell.eventMap.scrollEnabled = false
cell.eventMap.userInteractionEnabled = false
}

这很好,它有效,但我想有很多记录会出现内存问题 - 即使现在用户滚动表格时只有几个单元格 - 每个 map 都会立即加载,我只能想象它需要多少计算能力所以。

所以我的问题是 - 有没有办法将动态 map View 更改为 map 实际位置的某种截图?当涉及到大量细胞时,它会更快地工作吗?

最佳答案

对的,这是可能的。为此,您应该切换到使用 UIImageView(在下面的代码中称为 mapImageView)和 MKMapSnapshotter。为了让事情真正飞起来,您应该缓存 MKMapSnapshotter 生成的图像,以便在用户滚动回之前看到的单元格时立即加载它们。这种方法对资源很温和,因为它只使用一个全局 MKMapSnapShotter 而不是每个单元格的 map 。

这是我根据您的情况改编的一些代码。我没有详细说明如何具体缓存,因为这取决于您希望如何处理应用程序中的缓存。我用过 Haneke cocoapod:https://cocoapods.org/pods/Haneke在过去。此外,我在下面设置了许多常见的快照选项,但您可能应该根据您的用例调整它们。

//CHECK FOR CACHED MAP, IF NOT THEN GENERATE A NEW MAP SNAPSHOT      
let coord = CLLocationCoordinate2D(latitude: placeLatitude, longitude: placeLongitude)
let snapshotterOptions = MKMapSnapshotOptions()
snapshotterOptions.scale = UIScreen.mainScreen().scale
let squareDimension = cell.bounds.width < cell.bounds.height ? (cell.bounds.width)! : (cell.bounds.height)!
snapshotterOptions.size = CGSize(width: squareDimension, height: squareDimension)
snapshotterOptions.mapType = MKMapType.Hybrid
snapshotterOptions.showsBuildings = true
snapshotterOptions.showsPointsOfInterest = true
snapshotterOptions.region = MKCoordinateRegionMakeWithDistance(coord, 5000, 5000)

let snapper = MKMapSnapshotter(options: snapshotterOptions)

snapper.startWithCompletionHandler({ (snap, error) in
if(error != nil) {
print("error: " + error!.localizedDescription)
return
}
dispatch_async(dispatch_get_main_queue()) {
guard let snap = snap where error == nil else { return }

if let indexPaths = self.tview.indexPathsForVisibleRows {
if indexPaths.contains(indexPath) {
cell.mapImageView.image = snap
}
}
//SET CACHE HERE
}
})

关于uitableview - 在 UITableViewController 的每个单元格中,我都嵌入了 map 。有没有办法将其更改为 map 的屏幕截图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37336193/

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