Центр региона на пользовательском месте в MKMapView - PullRequest
1 голос
/ 13 мая 2011

Я в замешательстве.У меня есть MKMapView, и в методе viewDidLoad я выполняю:

- (void)viewDidLoad {
    mainDelegate = (PublicArtOmahaAppDelegate*)[[UIApplication sharedApplication]delegate]; 

    XMLController  *myXMLController = [[XMLController alloc] init]; 
    [myXMLController parse];
    mapView.showsUserLocation = YES;
    [self gotoLocation];

    // add annotations to map
    [self.mapView addAnnotations:mainDelegate.mapAnnotations];
    [myXMLController release];
}

[self gotoLocation]:mapView загружается, и я также планировал реализовать на экране кнопку, которая снова вызывала бы gotoLocation вручную, чтобы обновить местоположение пользователя, когда он захочет.

Но ... когда я запускаю приложение на устройстве, оно загружает карту с центром в океане к западу от Африки, который, очевидно, имеет широту и длину 0,0.Что мне показалось странным, так это то, что когда я увеличивал масштаб до своего реального местоположения, он правильно разместил мое местоположение в качестве аннотации.Итак, я думаю, что-то не так с тем, как я устанавливаю местоположение пользователя в gotoLocation?Кто-нибудь заметил, что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 13 мая 2011

Из MKUserLocation документации :

место

Текущее местоположение устройства. (Только для чтения)

@property (readonly, nonatomic) CLLocation *location

Обсуждение

Это свойство содержит ноль, если вид карты в данный момент не показывает местоположение пользователя или если местоположение пользователя еще не определено.

MKMapView (или CLLocationManager) может потребоваться несколько секунд, чтобы получить исправление о местоположении пользователя, и может потребоваться несколько попыток, чтобы получить относительно точное исправление. Лучше всего, вероятно, создать объект CLLocationManager, назначить ему делегата, а затем увеличить масштаб карты при запуске метода locationManager:didUpdateToLocation:fromLocation:.

0 голосов
/ 14 мая 2011

Вы должны установить span и для региона.Установите для него произвольное значение, например latitudeDelta = 0.01 (и то же самое для latitudeDelta).

Кроме того, вызовите gotoLocation изнутри – locationManager:didUpdateToLocation:fromLocation: (если вы используете диспетчер местоположения).Таким образом, вы будете звонить только тогда, когда у вас есть действительное местоположение пользователя.

...