2012-09-22 176 views
3

我正在使用地圖。我有個問題。我使用以下代碼來縮放參考this link in stackOverFlowMKMapView的縮放級別

它很容易縮放地圖。
但現在, 我無法放大和縮小地圖。這意味着我不能改變或找到另一個地方。它只關注當前位置。它的行爲像一個圖像修復。我不明白該怎麼辦? 請幫助。 我的代碼如下。

- (void) viewDidLoad 
{ 
[self.mapView.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.mapView.userLocation.coordinate; 

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

[self.mapView setRegion:region animated:YES]; 
} 
+0

非常相似http://stackoverflow.com/questions/12206646/ios-user-location -keeps-搶購回。此外,您鏈接的答案是在iOS 4之前,您不再需要KVO來觀看用戶位置更改。 – Anna

回答

2

我認爲問題是,你正在收聽的用戶位置的變化(這最有可能每秒發生多次),並且您的地圖區域設置該區域。

您需要做的是在地圖上添加一個按鈕(如Apple地圖的左上角),這會將地圖模式切換爲自由模式或固定到用戶位置。

當用戶按下按鈕時,您可以刪除/添加KVO。或在代碼中切換布爾標誌。當該標記爲真時,您不會更改地圖區域。喜歡的東西:

@implementation YourController{ 
    BOOL _followUserLocation; 
} 

- (IBAction) toggleMapMode:(id)sender{ 
    _followUserLocation = !_followUserLocation; 
} 

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

     MKCoordinateSpan span; 
     // retain the span so when the map is locked into user location they can still zoom 
     span.latitudeDelta = self.mapView.region.span.latitudeDelta; 
     span.longitudeDelta = self.mapView.region.span.longitudeDelta; 

     region.span = span; 

     [self.mapView setRegion:region animated:YES]; 
    } 
} 

@end 

也許你不想要這一切,你需要的是:

 // retain the span so when the map is locked into user location they can still zoom 
     span.latitudeDelta = self.mapView.region.span.latitudeDelta; 
     span.longitudeDelta = self.mapView.region.span.longitudeDelta; 
+0

它工作正常...非常感謝! – Parthpatel1105