4

我已经在同一个应用程序上工作了几个月,这是一个新问题。我想知道 Apple Map 数据的服务器端是否发生了变化。这是问题:

我的应用程序(有时)希望将 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坐标在哪里,我都会得到网格化的“无卫星图像”背景。这似乎与可用的卫星图像无关,因为它在美国的许多地区表现一致。

我知道setRegion:animated:事后可能会调整区域。而且我知道 1m 的正方形是一个不合理的小区域,试图在相当大的地图上显示。所以,我试过了

[self.map setRegion:[self.map regionsThatFits:region] animated:NO];

设置animated:YES似乎可以防止这种情况发生,但我不想为这些更改设置动画。

还有一些观察:

  • 如果我只缩小 1 或 2 个像素,就会出现地图图像。
  • 尝试实现地图委托方法:– mapViewDidFailLoadingMap:withError:没有帮助。它永远不会被调用。
  • 这似乎是新的。我在应用商店中拥有的应用程序的工作版本现在出现了类似的问题。
  • 我最近在其他流行的应用程序中看到了这种情况。

关于解决此问题的任何想法,或确认这是一个系统性问题?

4

2 回答 2

1
//fix for ios6
if (region.span.latitudeDelta < .0005f)
    region.span.latitudeDelta = .0005f;
if (!region.span.longitudeDelta < .0005f)
    region.span.longitudeDelta = .0005f;

确保您的纬度/经度区域跨度没有设置得太低,它会清除。

于 2013-06-27T19:48:59.293 回答
1

我最终继承MKMapView和覆盖了setRegion:. 如果有人有兴趣查看实际问题或我的解决方案,我已经在 Github 中创建了一个示例应用程序:

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];
    }
}
于 2013-07-19T23:56:13.087 回答