2013-03-24 2 views
1

Я положил карту в мое приложение Ios и я выставиться это следующим образом:Карта головы нигде на первый раз

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    CLLocationCoordinate2D cord = {.latitude = 44.508473, .longitude = 11.375828}; 

    [self.myMap setRegion:MKCoordinateRegionMake(cord, MKCoordinateSpanMake(.005, .005)) animated:YES]; 


    AddressAnnotation * annotazione = [[AddressAnnotation alloc] init]; 

    [annotazione setCoordinate:cord]; 
    [self.myMap addAnnotation:annotazione]; 
} 

и AddressAnnotation.m:

- (void)setCoordinate:(CLLocationCoordinate2D)coord { 
    coordinate = coord; 
} 

Это работает, но первый раз, когда я вид открытой карты показывает зону вблизи моря Антарктики (головка булавки для координат, но карта показывает антарктические морские зоны), и закрытие и повторное открытие карты показывают, что она точно показывает мой вывод.

Как я могу показать карту, увеличенную на Pin при первом открытии?

Большое вам спасибо!

ответ

1

В коде нет ничего плохого. Я бы, вероятно, просто определил свойство coordinate для вашего AddressAnnotation и давал компилятору синтез соответствующего сеттера и избавиться от настраиваемого сеттера, хотя это, вероятно, не связано с проблемой, которую вы описываете ... Это просто проще сделать так, что аннотация-х coordinate будет соответствовать КВО и т.д.

я мог бы предположить, что вы определяете ваш контроллер представления, чтобы быть делегатом вида карты, а затем реализовать regionDidChangeAnimated:

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated 
{ 
    NSLog(@"%s %f, %f %d", __FUNCTION__, mapView.region.center.latitude, mapView.region.center.longitude, animated); 
} 

Это может быть полезно знать что делает region, и, может быть, вы можете перепроектировать то, что происходит.

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


Делая это в проекте, я увидел следующий журнал:

 
2013-03-30 23:11:12.326 iBo[25408:c07] -[POIMapController mapView:regionDidChangeAnimated:] -47.422141, 0.000000 0 
2013-03-30 23:11:12.328 iBo[25408:c07] -[POIMapController mapView:regionDidChangeAnimated:] 44.508473, 11.375828 0 
2013-03-30 23:11:12.328 iBo[25408:c07] -[POIMapController mapView:regionDidChangeAnimated:] -47.422141, 0.000000 0 
2013-03-30 23:11:12.329 iBo[25408:c07] -[POIMapController mapView:regionDidChangeAnimated:] -47.422141, 0.000000 0 

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

В качестве альтернативы, я заметил, что если вы переместили свой код, чтобы установить регион из viewDidLoad (что довольно рано в процессе создания представления (после создания представления, но до его появления) и поместите его в viewDidAppear, он работает

+0

ничего полезного ... NSLog return "2013-03-25 18: 46: 55.938 Hackathlon [23887: c07] - [MappeController viewDidLoad] nan, nan " запись строки в режиме viewdidload, простой, при первом открытии, масштабирование карты в никуда! –

+0

@ Matte.Car Это неудовлетворительно. Я уверен, что ваш оператор журнала предлагает, чтобы вы ввели этот оператор журнала в 'viewDidLoad', и я предлагал вам добавить это в 'regionDidChangeAnimated'. Тем не менее проблема не сохраняется в списке кодов в вашем вопросе. Если бы вы могли загрузить код где-нибудь, я был бы рад взглянуть. Но небольшой фрагмент в вашем вопросе в порядке. (Я тестировал его в своем собственном проекте, и он работал нормально.) – Rob

+0

Я только что обнаружил очень странную вещь: в моем приложении карта появляется после некоторых табличных представлений, и у нее есть эта проблема, начиная приложение прямо с этого экрана, это работает правильно! –

Смежные вопросы