Обновление центральной точки и масштаба MKMapView (iPhone) - PullRequest
2 голосов
/ 26 сентября 2011

Я пытался центрировать вид карты по местоположению пользователей.Это также должно обновляться по мере регистрации изменения местоположения.Проблема, с которой я сталкиваюсь, заключается в том, что при загрузке приложения я не могу понять текущую широту и долготу, чтобы применить центрирование и масштабирование.

Это ключевые фрагменты кода, которые у меня есть до сих пор ...

- (void)viewDidLoad
{
    self.locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [locationManager startUpdatingLocation];

    [self updateMapZoomLocation:locationManager.location];

    [super viewDidLoad];
}

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

- (void)updateMapZoomLocation:(CLLocation *)newLocation
{
    MKCoordinateRegion region;
    region.center.latitude = newLocation.coordinate.latitude;
    region.center.longitude = newLocation.coordinate.longitude;
    region.span.latitudeDelta = 0.1;
    region.span.longitudeDelta = 0.1;
    [map setRegion:region animated:YES];   
}

Однако, похоже, этого не происходит.Приложение собирается и работает нормально, но отображается только черный экран - как будто координаты не существуют?!

У меня также есть метод делегата, который обрабатывает любые обновления, вызывая функцию выше...

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
           fromLocation:(CLLocation *)oldLocation
{
    [self updateMapZoomLocation:newLocation];
}

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

Любая помощь в этом была бы очень признательна;Я часами трал в интернете в поисках помощи и решений.

пс.'map' - это mapView.

Ответы [ 2 ]

3 голосов
/ 26 сентября 2014

Вы хотите использовать обратный вызов MKMapViewDelegate, поэтому вы увеличиваете масштаб только после того, как местоположение действительно известно:

Вот некоторый быстрый код для обработки этого:

var alreadyZoomedIn = false

func mapView(mapView: MKMapView!, didUpdateUserLocation userLocation: MKUserLocation!) {
    if(!alreadyZoomedIn) {
        self.zoomInOnCurrentLocation()
        alreadyZoomedIn = true
    }
}

func zoomInOnCurrentLocation() {

        var userCoordinate = mapView?.userLocation.coordinate
        var longitudeDeltaDegrees : CLLocationDegrees = 0.03
        var latitudeDeltaDegrees : CLLocationDegrees = 0.03
        var userSpan = MKCoordinateSpanMake(latitudeDeltaDegrees, longitudeDeltaDegrees)
        var userRegion = MKCoordinateRegionMake(userCoordinate!, userSpan)

        mapView?.setRegion(userRegion, animated: true)
}
2 голосов
/ 27 сентября 2011

Вы не должны вызывать updateMapZoomLocation во время своей функции viewDidLoad, потому что менеджер местоположений еще не переместился в местоположение. Если / когда это произойдет, он вызовет функцию делегата, когда он будет готов. До тех пор ваша карта не будет знать, где находится центр. Вы можете попробовать увеличить масштаб до предела или вспомнить, куда он в последний раз смотрел до закрытия приложения.

...