MKMapView не может прокручивать и масштабировать в iOS 5.0 - PullRequest
1 голос
/ 19 декабря 2011

Я обычно запускаю этот код в iOS 4.3. Но когда я изменяю проект на iOS 5.0, я не могу прокрутить и увеличить карту.

Кто-нибудь может сказать мне, почему возникла эта проблема? Как я могу решить это?

Код:

- (void)viewDidLoad
{
    [super viewDidLoad];
    CGRect rect = CGRectMake(0, 0, 320, 460);
    map = [[MKMapView alloc] initWithFrame:rect];
    map.showsUserLocation = YES;
    MKUserLocation *userLocation = map.userLocation;
    [userLocation addObserver:self forKeyPath:@"location"
                      options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial
                      context:nil];
    map.scrollEnabled = YES; 
    map.zoomEnabled = YES; 
    map.mapType = MKMapTypeStandard;
    [self.view addSubview:map];
}

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{       
    if ([change objectForKey:NSKeyValueChangeNewKey] != [NSNull null]) {
        MKCoordinateRegion region;

        CLLocationCoordinate2D testCoordinate;
        double lat = 22.195579570451734;
        double lng = 113.542275265336;
        testCoordinate.latitude = lat;
        testCoordinate.longitude = lng;
        region.center = testCoordinate;

        MKCoordinateSpan span; 
        span.latitudeDelta  = 0.0011;
        span.longitudeDelta = 0.0011; 
        region.span = span;
        [map setRegion:region animated:YES];
    }
}

1 Ответ

0 голосов
/ 19 декабря 2011

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

В iOS Simulator до iOS 5.0 изменения местоположения пользователя не моделировались, поэтому местоположениеметод наблюдателя смены либо не сработает, либо сработает не так часто.Поэтому, если вы прокручивали или масштабировали карту, карта останется такой до тех пор, пока метод наблюдателя не будет запущен (вероятно, никогда).

В iOS Simulator для iOS 5.0 изменения местоположения пользователя (или могут быть имитированы),Под отладочным меню симулятора iOS есть подменю Location.Если для этого параметра установлено значение, отличное от None, произойдет событие изменения местоположения пользователя, которое вызовет запуск метода наблюдателя.Если для параметра «Местоположение» выбрано значение «Городская велосипедная прогулка», «Городская трасса» или «Автострада», местоположение пользователя будет меняться очень часто.

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

Измените настройку «Локация» на «Нет» или «Пользовательское местоположение» (которая будет срабатывать только один раз).


Несвязанная точка - вам не нужно использовать KVO для наблюдения за изменениямик местоположению пользователя.Если ваше приложение не должно работать на iOS 3.0 или более ранней версии, вы должны использовать MKMapViewDelegate метод mapView:didUpdateUserLocation:.

...