【发布时间】:2013-10-16 17:30:15
【问题描述】:
我正在尝试更新我的瓦片地图代码以使用 iOS 7 的 MKTileOverlay 和 MKTileOverlayRenderer,我可以使用一些指针来让事情更好地工作。
首先,这里是 iOS6 代码:AppleTileOverlay.m 和 TileOverlayView.m。当我将TileOverlayView 替换为一个在所有方面都相同的类时,这在iOS 7 中仍然可以很好地工作,除了它是MKOverlayRenderer 的子类而不是MKOverlayView。
我正在测试的新部分是MKTileOverlay 的子类,唯一的方法是:
-(NSURL *)URLForTilePath:(MKTileOverlayPath)path {
NSString *tileKey = [[NSString alloc] initWithFormat:@"%d%d%d", path.x, path.y, path.z];
NSString *tilePath = [[NSBundle mainBundle] pathForResource:tileKey ofType:nil inDirectory:@"TileFolder"];
NSURL *url;
if (tilePath) {
url = [NSURL fileURLWithPath:tilePath];
}
return url;
}
地图图块在大多数情况下加载良好,但日志中充满了如下消息:
Error loading URL (null): Error Domain=NSURLErrorDomain Code=-1000 "bad URL" UserInfo=0x1b3e19e0 {NSUnderlyingError=0x1894d470 "bad URL", NSLocalizedDescription=bad URL}
来自为 URL 返回 nil 的方法。
所以问题是:我可以避免这些错误消息,还是应该坚持使用旧的覆盖类?
【问题讨论】:
-
你找到解决办法了吗?
-
没什么。我刚刚回到使用基于github.com/mtigas/iOS-MapLayerDemo 的旧版平铺叠加层,目前我不知道新版本是否更高效或更好。
-
顺便说一句,我认为您的文件命名系统存在问题。瓷砖 x=1 y=11 z=5 和 x=11 y=1 z=5 都将命名为 1115.png,x=1, y=1 z=15 也是如此。也许您的图块永远不会与可以跨越的坐标重合,但如果有人将地图视图拉到一个意想不到的位置,他们可能会在错误的位置获得奇怪的图块。您最好在每个参数之间加上下划线,例如 1_11_5.png 以避免任何误解。
-
非常好!到目前为止,我还没有看到这方面的问题,因为无论如何我的地图只在小范围内使用,但这将是一个非常简单的解决方法。好电话!