首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MKPolyLine上绘制MKTileOverlay时的性能问题

在MKPolyLine上绘制MKTileOverlay时的性能问题
EN

Stack Overflow用户
提问于 2018-09-04 08:14:15
回答 1查看 97关注 0票数 2

我有一个MKMapView,用户可以选择使用苹果地图还是其他地图源。在这张地图上,我画了一个显示当前标题的MkPolyline。该行通过删除和添加行,每秒钟更新一次。我的应用程序做了很多其他的计算,当使用Apple地图时,在调试模式下CPU级别大约是20%。如果我添加MKTileOverlay来使用另一个地图源,则CPU级别将增加到140%左右。

有人知道原因吗?使用MkTileOverlay有什么不同?

EN

回答 1

Stack Overflow用户

发布于 2022-08-04 16:10:30

同样的问题,我花了一段时间才弄明白,但这里是这样的:当您的瓦片覆盖的override func loadTile(at path: MKTileOverlayPath, result: @escaping (Data?, Error?) -> Void)有一个错误(例如,由于url错误或图像解码)并且result回调的第一个参数设置为null时,就会发生这种情况。为了解决这个问题,我将返回一个空的图像数据。下面是一个示例:

代码语言:javascript
复制
 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)
            }
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52161738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档