Подтвердить что ты не робот

SetRegion несовместим между версиями iOS?

Я разработал игру некоторое время назад. Игра состоит из карты испания, и вы должны угадать, где находится город на этой карте (у меня также есть версии EEUU и china) Я разработал их все с базой iOS 5 и с помощью iOS 5 sdk.

Затем, 3 недели назад, я обновил испанскую игру, и мне пришлось использовать sdk iOS 6, все кажется прекрасным на симуляторе и на моем ipad 2 (iOS 5.0.1) и iPod touch (iOS 5.1), и выпустил обновление.

Но когда люди начали загружать или обновлять новую версию, некоторые из них связались со мной, потому что карта не подходила к экрану.

Это скриншот, как я вижу игру на своих устройствах и симуляторе. (iPad 5.0.1 и симулятор с 5.0, 6.0 и 6.1, как в сетчатке, так и в обычном режиме) right

Это скриншот, как это показано на других устройствах. (iPad 3 с iOS 6.0 и iPad 2 с iOS 6.0.1)

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 в понедельник, но вчера я получил то же сообщение от другого пользователя с iPad 2.

Итак, я что-то делаю неправильно? setRegion несовместим между версиями iOS? как я могу проверить свой код, если он отлично работает на симуляторах?

Может кто-нибудь попробовать мой код на реальных устройствах и сказать мне, получают ли они карту, как первую или вторую?

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);, регион отличается, если я использую его перед загрузкой представления и появляется "увеличенный", когда я его использую позже.

Я подожду, пока не получу свою сетчатку iPad с iOS6, чтобы продолжить тестирование этой проблемы.

4b9b3361

Ответ 1

Есть несколько важных отличий в том, как регионы работают в iOS 5 и 6. На iOS 5 регион, который вы просите установить, редко будет фактическим регионом, который будет установлен. Это связано с тем, что MapKit на iOS 5 всегда устанавливает область, которая позволяет отображать изображения в виде фрагментов с соотношением 1:1. На iOS 6 нет изображений с черепицей, и все делается из векторных данных, поэтому область, которую вы получаете, очень близка к региону, о котором вы просите.

Говоря, я думаю, что проблема с вашим кодом может быть временем. Я мог бы воспроизвести вашу проблему, когда я установил область отображения в viewDidLoad:, даже если я использовал правильный диапазон (вместо использования 0 для дельта широты). Когда я переместил код в -viewDidAppear:, регион правильно установился на iPad с iOS 6, а также с Simulator с 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().

Поэтому я думаю, что проблема в том, что 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:.

Ответ 2

Ваша область координат очень странная - я не удивлюсь, если MapKit полностью ее игнорирует.

Центр (39.016740, -5.93504) выглядит отлично, но вы заявляете, что в идеале ваш взгляд будет показывать 0 метров широты (т.е. будет иметь нулевую высоту) и 800 км долготы.

Вы пытались предоставить разумное значение широты?

Ответ 3

на ios 5 у вас есть mapkit, используя карты google и ios 6, у вас есть mapkit с использованием встроенных карт, скорее всего, будут различия - особенно визуальные мудрые