Mapkit - уровень масштабирования постоянно сбрасывается

У меня есть следующий код:

-(void)viewDidLoad 
{
    //Set Zoom level using Span
    MKCoordinateSpan span;
    span.latitudeDelta = 0.05;
    span.longitudeDelta = 0.05;
    region.span = span;
}


-(void)locationChange:(CLLocation *)newLocation: (CLLocation *)oldLocation
{
    // This zooms in on the users current loation.
    curlocation = newLocation.coordinate;
    region.center = curlocation;

    [_mapView setRegion:region animated:TRUE];
}

Изначально уровень масштабирования устанавливается в соответствии с кодом в ViewDidLoad. Как сохранить идентификатор уровня масштабирования, который пользователь увеличивает или уменьшает, поскольку каждый раз, когда получено новое обновление местоположения, уровень масштабирования сбрасывается.

Есть ли способ обнаружить, что пользователь увеличил или уменьшил масштаб?

ОБНОВЛЕНИЕ

Я добавил метод regionDidChangeAnimated следующим образом:

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    NSLog(@"Region DID change.   Center is now %f,%f,  Deltas=%f,%f", 
          region.center.latitude, region.center.longitude,  
          region.span.latitudeDelta, region.span.longitudeDelta);
}

Вывод в журнале выглядит так:

2010-11-01 15: 17: 29.317 Legginit [2948: 307] Изменение DID региона.
Центр теперь 54.181150, -8.483177, Deltas = 0.050000,0.050000

2010-11-01 15: 17: 30.553 Legginit [2948: 307] Изменение DID региона.
Центр теперь 54.181150, -8.483177, Deltas = 0.050000,0.050000

2010-11-01 15: 17: 31.063 Изменение DID региона Legginit [2948: 307].
Центр теперь 54.181150, -8.483177, Deltas = 0.050000,0.050000

2010-11-01 15: 17: 31.653 Legginit [2948: 307] Изменение DID региона.
Центр теперь 54.181150, -8.483177, Deltas = 0.050000,0.050000

2010-11-01 15: 17: 32.582 Legginit [2948: 307] Изменение DID региона.
Центр теперь 54.181150, -8.483177, Deltas = 0.050000,0.050000

2010-11-01 15: 17: 33.608 Legginit [2948: 307] Изменение DID региона.
Центр теперь 54,181150, -8,483177, Deltas = 0,050000,0,050000

Когда я увеличивал масштаб изображения телефона, я ожидал, что значения дельты изменятся, но они остались на уровне 0,05. Я неправильно понимаю, как это работает. Я думал, что могу захватить значения Delta и сохранить их, чтобы я мог сбросить уровень масштабирования, если пользователь выйдет и снова войдет на карту.

С уважением, Стивен


person Stephen    schedule 27.10.2010    source источник


Ответы (2)


В locationChange попробуйте обновить диапазон вашего региона до текущего диапазона _mapView перед вызовом setRegion:

region.span = _mapView.region.span;

Если вам действительно нужно обнаруживать изменения масштаба по мере их появления, реализуйте метод MKMapViewDelegate regionWillChangeAnimated или regionDidChangeAnimated.

Изменить:
Вам необходимо получить новый регион из mapView и установить для него переменную экземпляра региона (вид карты не будет устанавливать вашу переменную экземпляра автоматически):

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
    region = mapView.region;  //<-- add this

    NSLog(@"Region DID change.   Center is now %f,%f,  Deltas=%f,%f",
          region.center.latitude, region.center.longitude,  
          region.span.latitudeDelta, region.span.longitudeDelta);
}
person Community    schedule 27.10.2010
comment
aBitObvious, я пошел по пути использования regionWillChangeAnimated. Я обновил свой вопрос выше, не могли бы вы взглянуть, если у вас есть минутка. Не думаю, что я точно понимаю, как это работает. - person Stephen; 01.11.2010

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

[_mapView setCenterCoordinate:newLocation.coordinate animated:YES];
person Jason    schedule 08.03.2011