我的客户对iOS应用感兴趣,但其中一个要求是离线地图。不幸的是,Google和iOS地图都需要有效的互联网连接来下载数据。一旦你打开应用程序一次,我认为你可以触发一个区域的缓存,但你仍然需要这个连接。
有没有办法将实际的地图数据与应用程序捆绑在一起,还是我需要通过编写自己的地图代码来重新发明轮子?
答案 0 :(得分:2)
如果您的应用是iOS 7+,那么使用MKTileOverlay可以获得一些灵活性。它允许您将自己的图块集放在普通的Apple地图上。
通过创建MKTileOverlay子类并重载loadTileAtPath:
,你可以检查你的包的初始状态,然后可能是一个单独的缓存,用于在有互联网连接时加载的磁贴,最后使用URL加载磁贴一切都失败了。
- (void)loadTileAtPath:(MKTileOverlayPath)path
result:(void (^)(NSData *data, NSError *error))result
{
if (!result) {
return;
}
NSString *filePath = ...; // Predetermined filename based off of MKTileOverlayPath
NSData *initialData = [NSData dataWithContentsOfFile:filePath];
NSData *cachedData = [self.cache objectForKey:[self URLForTilePath:path]];
if (initialData) {
result(initialData, nil);
} else if (cachedData) {
result(cachedData, nil);
} else {
NSURLRequest *request = [NSURLRequest requestWithURL:[self URLForTilePath:path]];
[NSURLConnection sendAsynchronousRequest:request queue:self.operationQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
result(data, connectionError);
}];
}
}
更多信息和一些示例here
答案 1 :(得分:1)