Центральная область на userLocation в Mkmapview
-
13-11-2019 - |
Вопрос
Я запутался.У меня есть mkmapview, а в методе weepdidload я делаю:
- (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] Звонки:
- (void)gotoLocation
{
MKCoordinateRegion newRegion;
CLLocation *userLocation = mapView.userLocation.location;
float latitude = userLocation.coordinate.latitude;
float longitude = userLocation.coordinate.latitude;
newRegion.center.latitude = latitude;
newRegion.center.longitude = longitude;
[self.mapView setRegion:newRegion animated:YES];
}
.
Так что я подумал, что это должно центрировать карту на местоположении пользователя, когда нагрузки MapView, и я также планировал реализовать кнопку на экране, который вручную снова позвонит Gotolocation, чтобы обновить местоположение пользователя, когда они нужны.
Но ... Когда я запускаю приложение на устройстве, он загружает карту, сосредоточенную в патче океана к западу от Африки, что, по-видимому, LAT и долгое 0,0.То, что я подумал, что было странным, было то, что когда я вернулся к моему настоящему расположению, он правильно разместил свое местоположение как аннотацию.Поэтому я думаю, что есть что-то не так с тем, как я устанавливаю местоположение пользователя в Gotolocation?Кто-нибудь замечает то, что я делаю не так?
Решение
из
от Генеракодицетагкод документации :
Расположение
текущее местоположение устройства.(только для чтения)
MKUserLocation
<Сильные> Обсуждение
Это свойство содержит nil, если в настоящее время представление карты не показывает местоположение пользователя или, если местоположение пользователя еще не было определено.
Требуется несколько секунд для Mkmapview (или ClllocationManager), чтобы получить решение в месте пользователя, и может занять пару попыток получить относительно точное исправление.Ваша лучшая ставка, вероятно, создает объект
@property (readonly, nonatomic) CLLocation *location
, назначить его делегатом, а затем увеличить карту, когда методCLLocationManager
Fires.
Другие советы
Вы должны установить span
для региона тоже.Установите его на некоторую рольную ценность, например latitudeDelta = 0.01
(и то же самое для latitudeDelta
).
Также, позвоните в gotoLocation
изнутри – locationManager:didUpdateToLocation:fromLocation:
(если вы используете менеджер местоположения).Таким образом, вы позвоните только тогда, когда у вас есть действительное местоположение пользователя.