我有一个MKMapView,用户可以选择使用苹果地图还是其他地图源。在这张地图上,我画了一个显示当前标题的MkPolyline。该行通过删除和添加行,每秒钟更新一次。我的应用程序做了很多其他的计算,当使用Apple地图时,在调试模式下CPU级别大约是20%。如果我添加MKTileOverlay来使用另一个地图源,则CPU级别将增加到140%左右。
有人知道原因吗?使用MkTileOverlay有什么不同?
发布于 2022-08-04 16:10:30
同样的问题,我花了一段时间才弄明白,但这里是这样的:当您的瓦片覆盖的override func loadTile(at path: MKTileOverlayPath, result: @escaping (Data?, Error?) -> Void)有一个错误(例如,由于url错误或图像解码)并且result回调的第一个参数设置为null时,就会发生这种情况。为了解决这个问题,我将返回一个空的图像数据。下面是一个示例:
class MyTileOverlay: MKTileOverlay {
private lazy var emptyImageData: Data? = {
UIGraphicsBeginImageContext(tileSize)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image?.pngData()
}()
override func loadTile(at path: MKTileOverlayPath, result: @escaping (Data?, Error?) -> Void) {
super.loadTile(at: path) { (data, error) in
if let data = data,
var image = UIImage(data: data){
if UIScreen.main.traitCollection.userInterfaceStyle == .dark {
image = image.invert()
}
result(image.pngData(), error)
}else {
result(self.emptyImageData, error)
}
}
}https://stackoverflow.com/questions/52161738
复制相似问题