12

我前段时间开发了一款游戏。游戏包含在一张西班牙地图上,您必须猜测该地图上的城市位置(我也有 EEUU 和中国版本)我使用 iOS 5 基础并使用 iOS 5 sdk 开发了所有这些。

然后,3 周前我更新了西班牙游戏,我不得不使用 iOS 6 sdk,在模拟器和我的 ipad 2 (iOS 5.0.1) 和 iPod touch (iOS 5.1) 上一切似乎都很好,并发布了更新。

但是当人们开始下载或更新新版本时,他们中的一些人因为地图不适合屏幕而联系了我。

这是我如何在我的设备和模拟器上查看游戏的屏幕截图。(iPad 5.0.1 和 5.0、6.0 和 6.1 的模拟器,在视网膜和正常模式下) 对

这是它如何在其他人的设备上显示的屏幕截图。(装有 iOS 6.0 的 iPad 3 和装有 iOS 6.0.1 的 iPad 2)

错误的

这是我的 iPad 代码(据我所知,在 iPhone 上按预期工作)

CLLocationCoordinate2D centerLocation;
MKCoordinateRegion region;
centerLocation.latitude = 39.016740;
centerLocation.longitude = -5.93504;
region = MKCoordinateRegionMakeWithDistance(centerLocation, 0, 800000);
[map setRegion:region];

起初我认为这是视网膜问题,因为第一个联系我的人使用的是 iPad 3,我在周一修复了 iPad 视网膜的地图,但昨天我从另一个使用 iPad 2 的用户那里得到了同样的信息。

那么,我做错了吗?iOS版本之间的setRegion不一致吗?如果我的代码在模拟器上运行良好,我该如何测试它?

有人可以在真实设备上尝试我的代码并告诉我他们得到的地图是第一个还是第二个?

EDIT1: 接受答案后的最终想法:这不是iOS版本之间的问题,它似乎是时间问题,如果您在视图出现之前或之后设置它,区域会有所不同。它发生在 iOS 5 和 iOS 6 中。

iOS 5 和 iOS 6 之间的唯一区别发生在真实设备上,如果您在地图出现之前设置区域,它会保持原样,但在模拟器上的 iOS 6 上它将保持原样,但在真实设备上,它将显示为视图出现时设置的区域。

因此,解决方案是将区域设置为打开viewDidAppear,它将在 iOS 5 和 iOS 6、模拟器和真实设备上以相同的方式显示。

编辑2: 区域上的0似乎也与问题有关,如果我使用region = MKCoordinateRegionMakeWithDistance(centerLocation, 800000, 800000);该区域在视图加载之前和之后是相同的,至少在模拟器上是这样。如果我region = MKCoordinateRegionMakeWithDistance(centerLocation, 0, 800000);在视图加载之前使用该区域,则该区域会有所不同,并且在以后使用它时会显示为“缩放”。

我会等到收到装有 iOS6 的 iPad Retina 后再继续测试这个问题。

4

3 回答 3

9

iOS 5 和 6 中区域的工作方式存在一些重要差异。在 iOS 5 上,您要求设置的区域很少是实际设置的区域。这与 iOS 5 上的 MapKit 始终设置允许平铺图像以 1:1 比例显示的区域有关。在 iOS 6 上,没有平铺图像,所有内容都是从矢量数据中绘制的,因此您获得的区域非常接近您要求的区域。

话虽如此,我认为您的代码的问题可能是时机。当我将地图的区域设置为 时viewDidLoad:,即使我使用了适当的跨度(而不是使用0纬度增量),我也可以重现您的问题。当我将代码移至 时-viewDidAppear:,该区域在装有 iOS 6 的 iPad 以及装有 iOS 6 的模拟器上正确设置。这是我使用的代码:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    CLLocationCoordinate2D centerLocation = 
            CLLocationCoordinate2DMake(39.016740, -5.93504);
    MKCoordinateSpan span = MKCoordinateSpanMake(12.7, 12.7);
    MKCoordinateRegion region = MKCoordinateRegionMake(centerLocation, span);
    [self.mapView setRegion:region animated:NO];
}

12.7用作latitudeDeltaand longitudeDelta。最好将该区域设置为正方形,以使该区域在横向和纵向模式下具有重要的位置。如果要使用该CLLocationCoordinate2DMake()功能,则需要导入核心位置框架。

所以我认为问题在于 MapKit 在您尝试设置区域后设置它(在 iOS 6 上)。-mapView:regionDidChangeAnimated:您可以使用以下代码检查正在设置的区域:

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    NSLog(@"%f %f %f %f", 
            self.mapView.region.span.latitudeDelta, 
            self.mapView.region.span.longitudeDelta, 
            self.mapView.region.center.latitude, 
            self.mapView.region.center.longitude);
}

因此,如果您的代码将区域设置为-viewDidLoad:,请尝试将其移动到-viewDidAppear:.

于 2012-12-21T19:05:31.503 回答
2

你的坐标区域很奇怪——如果 MapKit 完全忽略它,我不会感到惊讶。

(39.016740, -5.93504) 的中心看起来不错,但您说理想情况下,您的视图将显示 0 米的纬度(即高度为零)和 800 公里的经度。

您是否尝试过提供合理的纬度值?

于 2012-12-19T15:09:27.067 回答
1

在 ios 5 上,您有使用谷歌地图的 mapkit,而在 ios 6 上,您有使用内置地图的 mapkit,可能存在差异——尤其是视觉方面

于 2012-12-14T15:37:55.277 回答