我不久前开发了一款游戏。 游戏包含西班牙地图,您必须猜测该地图上的城市(我也有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视网膜以继续测试这个问题。
答案 0 :(得分: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
作为latitudeDelta
和longitudeDelta
。让该地区成为一个正方形是很好的,因为该地区将在景观和肖像模式中占据重要位置。如果要使用CLLocationCoordinate2DMake()
函数,则需要导入Core Location框架。
所以我认为问题是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:
。
答案 1 :(得分:2)
您的坐标区域非常奇怪 - 如果MapKit完全忽略它,我不会感到惊讶。
(39.016740,-5.93504)的中心看起来不错,但你说明,理想情况下,你的视图会显示0米的纬度(即高度为零)和800公里的经度。
您是否尝试过提供合理的纬度值?
答案 2 :(得分:1)