2010-10-27 3 views
1

У меня есть следующий код на месте: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. Как сохранить идентификатор уровня масштабирования, который пользователь увеличивает или увеличивает, так как каждый раз, когда новое обновление местоположения принимается, уровень масштабирования сбрасывается.

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

UPDATE

Я добавить метод 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] Регион меняла.
центр теперь 54,181150, -8,483177, Deltas = 0.050000,0.050000

2010-11-01 15: 17: 31,063 Legginit [2948: 307] Регион меняла.
центр теперь 54,181150, -8,483177, Deltas = 0.050000,0.050000

2010-11-01 15: 17: 31,653 Legginit [2948: 307] Регион меняла.
центр теперь 54,181150, -8,483177, Deltas = 0.050000,0.050000

2010-11-01 15: 17: 32,582 Legginit [2948: 307] Регион меняла.
центр теперь 54,181150, -8,483177, Deltas = 0.050000,0.050000

2010-11-01 15: 17: 33,608 Legginit [2948: 307] Регион меняла.
центр теперь 54,181150, -8,483177, Deltas = 0.050000,0.050000

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

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

ответ

2

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

region.span = _mapView.region.span; 

Если вам действительно нужно, чтобы обнаружить изменения масштаба изображения, как они происходят, реализовать Область метода MKMapViewDelegateWillChangeAnimated или regionDidChangeAnimated.

Edit:
Вы должны получить новый регион от 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); 
} 
+0

aBitОчевидно, я пошел по пути использования regionWillChangeAnimated. Я обновил свой вопрос выше, не могли бы вы быстро взглянуть, если у вас есть минута. Я не думаю, что понимаю, как это работает. – Stephen

+0

Я обновил ответ. – Anna

0

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

[_mapView setCenterCoordinate:newLocation.coordinate animated:YES]; 
Смежные вопросы