iOS MKMapView加载自定义磁贴优化
我已经开发了带有定制TileOverlay的iOS地图应用程序,它可以从我们自己的服务器加载Tile。我扩展了TileOverlay类,该类获取的平铺数据如下:iOS MKMapView加载自定义磁贴优化,ios,swift,mkmapview,mapkit,mktileoverlay,Ios,Swift,Mkmapview,Mapkit,Mktileoverlay,我已经开发了带有定制TileOverlay的iOS地图应用程序,它可以从我们自己的服务器加载Tile。我扩展了TileOverlay类,该类获取的平铺数据如下: override func loadTile(at path: MKTileOverlayPath, result: @escaping (Data?, Error?) -> Void) { let url = self.url(forTilePath: path) if let cachedData = cach
override func loadTile(at path: MKTileOverlayPath, result: @escaping (Data?, Error?) -> Void)
{
let url = self.url(forTilePath: path)
if let cachedData = cache.object(forKey: url as AnyObject) as? NSData
{
result(cachedData as Data, nil)
} else {
let session = URLSession.shared
let request = NSURLRequest(url: url)
let task = session.dataTask(with: request as URLRequest, completionHandler: {data, response, error -> Void in
if let data = data {
self.cache.setObject(data as AnyObject, forKey: url as AnyObject)
}
result(data, error)
})
task.resume()
}
}
该应用程序正常工作,但当我快速放大/缩小或平移到随机方向时,瓷砖加载速度非常慢。尤其是在iPad上,加载当前视图大约需要一分钟。我将print(path.z)添加到方法“loadTile”
,并意识到mapView请求的tile不在所选区域中。结果,所选区域的加载速度非常慢。我将if
条件放入线程执行块
let task = session.dataTask(with: request as URLRequest, completionHandler: {data, response, error -> Void in
**let zoomLevel = self.getZoom()
if Double(path.z) < zoomLevel - 2 || Double(path.z) > zoomLevel + 2 {
print("cancelled by zoom")
return
}**
if let data = data {
self.cache.setObject(data as AnyObject, forKey: url as AnyObject)
}
result(data, error)
print("")
})
task.resume()
let task=session.dataTask(其中:request作为URLRequest,completionHandler:{data,response,error->Void in
**让zoomLevel=self.getZoom()
如果Double(path.z)zoomLevel+2{
打印(“通过缩放取消”)
返回
}**
如果let data=data{
self.cache.setObject(数据为AnyObject,forKey:url为AnyObject)
}
结果(数据、错误)
打印(“”)
})
task.resume()
它多次增强加载瓷砖,但加载饰面时,会出现空白瓷砖。这是因为缩放级别的计算不正确(我找到了几种方法来查找缩放级别,但没有一种方法是确定的)
我使用的是MapKit sdk,Swift的版本是3.0
所以我的问题是,如何优化瓷砖加载过程?如何取消不必要的线程?对这类问题有什么建议吗。提前谢谢。我已经找到了问题的答案。如果有人感兴趣,请与我联系。你可以在这里回答你自己的问题,并将其标记为答案。如果你不愿意,请这样做mind@FarizSiracli我也很想看到你的答案。@Farizziracli我正在我的应用程序中寻找类似的优化。你介意发布你对这个问题的答案吗?@Farizziracli答案是什么?