MKMapView: setRegion не работает!

Аааарг... ладно, давай успокоимся.

Были ли у кого-то проблемы с настройкой региона MKMapView? Это никогда не работало со мной.

Этот код:

-(void)setUserCenteredSpan:(MKCoordinateSpan)span{ // for this example, span = {0.5, 0.5}
    // Current region (just initialised)
NSLog(@"%f, %f - %f, %f",   self.region.center.latitude,
                            self.region.center.longitude, 
                            self.region.span.latitudeDelta, 
                            self.region.span.longitudeDelta);
    // New Region
MKCoordinateRegion region = MKCoordinateRegionMake([[[self userLocation] location] coordinate],
                                                   span);
NSLog(@"%f, %f - %f, %f",   region.center.latitude,
                            region.center.longitude, 
                            region.span.latitudeDelta, 
                            region.span.longitudeDelta);
    // Region saved in MKMapView
[self setRegion:region animated:NO];
NSLog(@"%f, %f - %f, %f",   self.region.center.latitude,
                            self.region.center.longitude, 
                            self.region.span.latitudeDelta, 
                            self.region.span.longitudeDelta);
}

Возвращает этот журнал:

30.145127, -40.078125 - 0.000000, 0.000000
0.000000, 0.000000 - 0.500000, 0.500000
0.000000, 0.000000 - 0.000000, 0.000000

Ты знаешь почему ??!

Большое спасибо, вы можете спасти меня от самоубийства X(

Март

РЕДАКТИРОВАТЬ: Конечно, я на устройстве, подключенном к Интернету.


person Martin    schedule 15.09.2009    source источник


Ответы (3)


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

Созданный экземпляр MKMapView был инициализирован не с помощью фрейма, а с параметром autoresizingMask, установленным на > 0.

Когда был вызван метод setRegion, мое представление еще не было оформлено. Я думаю, что значения области вычисляются в соответствии с рамкой просмотра, поэтому эти значения не могут быть найдены.

Просто установите рамку перед выполнением setRegion, и она будет отображаться нормально.

До свидания !

person Martin    schedule 16.09.2009
comment
Конечно. Я устанавливал область mapView в viewDidLoad контроллера, но, увы, размер кадра был (0,0). Установка региона не имеет никакого эффекта, пока рамка вида не будет установлена ​​(очевидно). Кадр должен быть установлен к моменту вызова viewDidAppear. - person wcochran; 21.03.2013
comment
спасибо за это, вы только что спасли еще одну ночь таскания за волосы. Интересно, что я следил за учебником Рэя Вендерлиха, в котором говорилось, что viewWillAppear будет работать, но не для меня. Не уверен, почему, но viewDidAppear сделал свое дело! - person gdbj; 13.06.2013
comment
Это красиво! +1 - person Eduardo; 08.06.2016

В вашем первом журнале используется self.region.center.latitude, но я нигде не вижу этого в вашем вызове MKCoordinateRegionMake. Журнал сообщает вам, что все, что вы используете для установки региона, имеет широту/долготу 0/0...

person Kendall Helmstetter Gelner    schedule 15.09.2009
comment
[[[self userLocation] location] координата] должна возвращать широту/долготу позиции пользователя. Первый аргумент MKCoordinateRegionMake должен устанавливать широту/долготу позиции пользователя, пусть он остается 0/0... - person Martin; 16.09.2009

Мне помогла настройка маски автоматического изменения размера.

[_mapView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];   
person Adam Cooper    schedule 22.08.2015