如何从子类调用MKTileOverlay

如何从子类调用MKTileOverlay

我在下面标记的点上遇到运行时错误?如何从子类调用mktileoverlay“url”函数?正在获取exc_bad_指令?
基本上想在某些地方显示自定义的分幅,但如果不可用,请返回到标准的苹果地图分幅。

class GCMapOverlay : MKTileOverlay {
    override func url(forTilePath path: MKTileOverlayPath) -> URL {
        // Get local custom map tile if available
        let optionalUrl = Bundle.main.url(
            forResource: "\(path.y)",
            withExtension: "png",
            subdirectory: "tiles/\(path.z)/\(path.x)",
            localization: nil)
        NSLog("tiles/\(path.z)/\(path.x)/\(path.y)")

        guard let url = optionalUrl else {
            // Local tile not available - want to drop back to an apple maps tile (as if MKTileOverlay wasn't subclassed)
            return super.url(forTilePath: path)    // <== RUNTIME ERROR: NetworkLoad (10): EXC_BAD_INSTRUCTION
        }

        // Local tile available so return
        return url
    }
}

在我的控制器中
func setupTileRenderer() {
    let overlay = GCMapOverlay()
    overlay.canReplaceMapContent = true
    mapView.addOverlay(overlay, level: .aboveLabels)
    tileRenderer = MKTileOverlayRenderer(tileOverlay: overlay)
}

最佳答案

移除overlay.canReplaceMapContent = true并更改保护声明,以便加载一个透明的256x256磁贴。

guard let url = optionalUrl else {
    return Bundle.main.url(forResource: "emptyTile", withExtension: "png")!
}

由于所有自定义磁贴都已存储在本地,因此它们将立即加载到默认的apple磁贴上,这使得canReplaceMapContent不必要。
确保您的自定义磁贴中没有alpha,否则苹果磁贴将在下面可见。

关于swift - 如何从子类调用MKTileOverlay“URL”函数?得到EXC_BAD_INSTRUCTION,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55942629/

10-14 20:41