MKMapView: при запуске пользователя → масштабирование

У меня есть MKMapView и в представлении карты "Показать местоположение пользователя". Вопрос, должен ли приложение использовать мое местоположение, я говорю "да". Затем я вижу голубую пулю, и я могу увеличить ее до текущего местоположения.

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

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

Каковы шаги для реализации этого поведения? Я попытался например: Как увеличить MKMapView до текущего местоположения пользователей без CLLocationManager? с помощью KVO, но он не работает...

Надеюсь, у кого-то есть идея?

С наилучшими пожеланиями, Тим

Ответ 1

Вы пробовали метод делегата mapView: didUpdateUserLocation:?

В моем коде я использовал что-то вроде этого:

В файле .h:

@property (nonatomic, retain) CLLocation* initialLocation;

И в файле .m:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    if ( !initialLocation )
    {
        self.initialLocation = userLocation.location;

        MKCoordinateRegion region;
        region.center = mapView.userLocation.coordinate;
        region.span = MKCoordinateSpanMake(0.1, 0.1);

        region = [mapView regionThatFits:region];
        [mapView setRegion:region animated:YES];
    }
}

Ответ 2

вы можете сделать это, как это в своем viewDidLoad, написать этот код

self.mapDetail.showsUserLocation = YES;
[self.mapDetail.userLocation addObserver:self
                            forKeyPath:@"location"
                               options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld)
                               context:nil];

и этот метод выполнит задачу

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    MKCoordinateRegion region;
    region.center = self.mapDetail.userLocation.coordinate;

    MKCoordinateSpan span;
    span.latitudeDelta  = 1; // Change these values to change the zoom
    span.longitudeDelta = 1;
    region.span = span;

    [self.mapDetail setRegion:region animated:YES];
    [self.mapDetail.userLocation removeObserver:self forKeyPath:@"location"];
}