MKMapView setRegion to Small Area导致失败的卫星图像加载
我已经在同一个应用上工作了好几个月,这是一个新问题。 我想知道在苹果地图数据的服务器端是否有变化。 这是问题:
我的应用程序(有时)想要将MKMapView区域设置为在特定位置可能的最充分放大的值。 要做到这一点,我做了这样的事情:
self.map.mapType = MKMapTypeHybrid; MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2DMake(item.lat, item.lng), 1.0, 1.0); [self.map setRegion:region animated:NO];
无论item's
坐标是什么,我都会得到网格化的“无卫星图像”背景。 这似乎与卫星图像无关,因为它在美国的许多地区performance一致。
我知道setRegion:animated:
可以在事实之后调整区域。 而且我知道一个100万平方米是一个不合理的小区域,试图在相当大的地图上显示。 所以,我试过了
[self.map setRegion:[self.map regionsThatFits:region] animated:NO];
设置animated:YES
似乎阻止了这种情况发生,但我不想animation这些变化。
还有几点意见:
- 如果我缩小1或2像素,地图图像显示。
- 试图实现地图委托方法:
– mapViewDidFailLoadingMap:withError:
没有帮助。 它从来没有被称为。 - 这似乎是新的。 我在应用程序商店中的应用程序的工作版本,现在展示类似的问题。
- 我最近在其他stream行的应用程序中看到过这种情况。
有没有解决这个问题的任何想法,或确认这是一个系统性的问题?
//fix for ios6 if (region.span.latitudeDelta < .0005f) region.span.latitudeDelta = .0005f; if (!region.span.longitudeDelta < .0005f) region.span.longitudeDelta = .0005f;
确保你的区域经纬度没有设置太低,它会清除。
我结束了setRegion:
MKMapView
和重写setRegion:
我在Github中创build了一个示例应用程序,如果有人有兴趣看到问题的实际或我的解决scheme:
https://github.com/DeepFriedTwinkie/iOS6MapZoomIssue
我的setRegion:
方法如下所示:
- (void) setRegion:(MKCoordinateRegion)region animated:(BOOL)animated { @try { // Get the zoom level for the proposed region double zoomLevel = [self getFineZoomLevelForRegion:region]; // Check to see if any corrections are needed: // - Zoom level is too big (a very small region) // - We are looking at satellite imagery (Where the issue occurs) // - We have turned on the zoom level protection if (zoomLevel >= (MAX_GOOGLE_LEVELS-1) && self.mapType != MKMapTypeStandard && self.protectZoomLevel) { NSLog(@"setRegion: Entered Protected Zoom Level"); // Force the zoom level to be 19 (20 causes the issue) MKCoordinateRegion protectedRegion = [self coordinateRegionForZoomLevel:MAX_GOOGLE_LEVELS-1.0 atCoordinate:region.center]; [super setRegion:protectedRegion animated:animated]; } else { [super setRegion:region animated:animated]; } } @catch (NSException *exception) { [self setCenterCoordinate:region.center]; } }