인터넷 연결이 자주 어려워지는 태국을 주로 대상으로하므로 내 앱의 오프라인지도를해야 할 필요가 있습니다. 지금 MKTileOverlay
에 대해 OpenStreetMap
을 사용하고 있지만 오프라인으로 사용하기 위해 구현하는 데 문제가 있습니다. MKTileOverlay
하위 클래스라는 튜토리얼을 발견했습니다. 그래서, 내 ViewController
지도는 어디 있습니다지도의 오프라인 캐시
MKTileOverlay
의 내 서브 클래스에서
- (void)viewWillAppear:(BOOL)animated {
CLLocationCoordinate2D coord = {.latitude = 15.8700320, .longitude = 100.9925410};
MKCoordinateSpan span = {.latitudeDelta = 3, .longitudeDelta = 3};
MKCoordinateRegion region = {coord, span};
[mapView setRegion:region];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"Map";
NSString *template = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png";
self.overlay = [[XXTileOverlay alloc] initWithURLTemplate:template];
self.overlay.canReplaceMapContent = YES;
[mapView addOverlay:self.overlay level:MKOverlayLevelAboveLabels];
}
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id)overlay {
return [[MKTileOverlayRenderer alloc] initWithTileOverlay:overlay];
}
, 내가 가진 : 나는 주석 않는
- (NSURL *)URLForTilePath:(MKTileOverlayPath)path {
return [NSURL URLWithString:[NSString stringWithFormat:@"http://tile.openstreetmap.org/{%ld}/{%ld}/{%ld}.png", (long)path.z, (long)path.x, (long)path.y]];
}
- (void)loadTileAtPath:(MKTileOverlayPath)path
result:(void (^)(NSData *data, NSError *error))result
{
if (!result) {
return;
}
NSData *cachedData = [self.cache objectForKey:[self URLForTilePath:path]];
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);
}];
}
}
문제는, 아무것도 전혀로드되지 가져옵니다이다 서브 클래스의 코드. 내가 어디에서 엉망 이냐?
어디에서 loadTileAtPath 메서드를 호출합니까? – ldindu
나는 경로를 요구하고 그것을 얻는 방법을 모르기 때문에 그것을 부르는 방법을 확신 할 수 없기 때문에 나는 그것을 부르지 않을 것이다. @ldindu – user717452
@ldindu지도가 처음으로로드되는 경로를 어떻게 전달합니까? 정상적인 initWithUrlTemplate을 사용하면 방금 발생하지만이 설정으로 단서가 없습니다. – user717452