2011-12-19 66 views
1

我通常在iOS 4.3中運行此代碼。但是當我將項目更改爲iOS 5.0時,我無法滾動和縮放地圖。MKMapView無法滾動和放大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]; 
    } 
} 

回答

0

的代碼被觀察到的變化的用戶位置和更新地圖的區域,以一些固定區域當這種情況發生。

在iOS 5.0之前的iOS模擬器中,用戶位置變化未被模擬,因此位置變化觀察者方法不會觸發或不頻繁觸發。所以如果你滾動或縮放地圖,地圖將保持這種方式,直到觀察者方法被解僱(可能永遠不會)。

在iOS 5.0的iOS模擬器中,用戶位置更改(或可以)被模擬。在iOS模擬器的調試菜單下,有一個位置子菜單。如果此設置爲None,則用戶位置更改事件將發生並導致觀察者方法觸發。如果「位置」設置爲「城市自行車騎行」,「城市運行」或「高速公路驅動器」,則用戶位置將更改頻繁。

由於每次用戶位置發生變化時,您的觀察者方法都會將地圖的區域重新設置爲某個固定區域,因此您對地圖執行的任何滾動或縮放幾乎都會立即未完成。

將位置設置更改爲無或自定義位置(只會觸發一次)。


不相關的一點是您不需要使用KVO來觀察用戶位置的更改。除非您的應用程序需要在iOS 3.0或更低版本上運行,否則應該使用MKMapViewDelegate方法mapView:didUpdateUserLocation:

+0

安娜你說得對,我使用mapView:didUpdateUserLocation:現在工作正常,非常感謝! – 2011-12-21 09:51:46