是iOS版本之间的setRegion不一致吗?

jce*_*ile 12 iphone objective-c mapkit ipad ios

我不久前开发了一款游戏.游戏包含西班牙地图,你必须猜测一个城市在该地图上的位置(我也有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];
Run Code Online (Sandbox Code Playgroud)

起初我认为这是一个视网膜问题,因为第一个联系我的人使用的是iPad 3,我在星期一修复了iPad视网膜的地图,但昨天我收到了来自另一个用iPad 2的用户的相同信息.

那么,我做错了什么?是iOS版本之间的setRegion不一致吗?如果它在模拟器上工作正常,我该如何测试我的代码?

有人可以在真实设备上尝试我的代码并告诉我他们是否像第一个或第二个那样获得地图?

编辑1: 接受答案后的最终想法:这不是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视网膜以继续测试这个问题.

nev*_*ing 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];
}
Run Code Online (Sandbox Code Playgroud)

我用12.7latitudeDeltalongitudeDelta.让该地区成为一个正方形是很好的,因为该地区将在景观和肖像模式中占据重要位置.如果要使用该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);
}
Run Code Online (Sandbox Code Playgroud)

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