gpt4 book ai didi

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

转载 作者:技术小花猫 更新时间:2023-10-29 10:36:25 28 4
gpt4 key购买 nike

我前段时间开发了一款游戏。游戏包含一张西类牙 map ,你必须猜出 map 上城市的位置(我也有 EEUU 和中国版本)我用 iOS 5 base 和 iOS 5 sdk 开发了它们。

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

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

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

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

wrong

这是我的 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 视网膜的 map ,但昨天我从另一个使用 iPad 2 的用户那里得到了同样的消息.

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

有人可以在真实设备上试用我的代码,然后告诉我他们得到的 map 是否像第一个或第二个一样?

编辑 1:接受答案后的最终想法:这不是 iOS 版本之间的问题,它似乎是一个时间问题,如果您在 View 出现之前或之后设置区域是不同的。它发生在 iOS 5 和 iOS 6 中。

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

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

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

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

最佳答案

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

话虽如此,我认为您的代码的问题可能在于时机。当我在 viewDidLoad: 中设置 map 区域时,我可以重现您的问题,即使我使用了适当的跨度(而不是使用 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 作为 latitudeDeltalongitudeDelta。最好将该区域设为正方形,这样该区域在横向和纵向模式下都会有重要的位置。如果您想使用 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:

关于iphone - iOS 版本之间的 setRegion 不一致吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13881475/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com