2014-03-30 20 views
2

我使用的是mapview,有時我的地圖會在我打開它時放大到我的用戶位置,但有時它會縮放到海洋中間。我不知道是什麼導致這種情況,這是我用於縮放的代碼。我不想地圖來追蹤用戶,但只放大自己的位置,一旦他們打開地圖MKMapView有時會縮放到用戶位置有時會放大到無處可能

-(void) viewDidAppear:(BOOL)animated{ 

MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.mapView.userLocation.coordinate, 600.0f, 600.0f); 
[self.mapView setRegion:region animated:YES]; 

} 

-(void) viewDidLoad{ 

[super viewDidLoad]; 

self.mapView.delegate = self; 
[self.mapView setShowsUserLocation:YES]; 

} 

回答

3

我以前遇到過這個問題。看來mapView加載和檢測用戶位置的速度有時很慢,導致您的代碼被執行之前地圖視圖可以檢查用戶的位置。因此,海洋中的斑點。

這將是更好地使用MapView類的委託,以顯示用戶的位置時,它的準備:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    if(isShowUserLocation) 
    { 
     MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(userLocation.coordinate, 600.0, 600.0); 
     [self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES]; 
     isShowUserLocation = NO; 
    } 
} 

isShowUserLocation = YESviewDidLoad。這確保了用戶的位置在輸入時顯示一次,並且在需要時也可以有選擇地顯示。

編輯1:

@implementation MapViewController 
{ 
    BOOL isShowUserLocation; 
} 

-(void) viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.mapView.delegate = self; 
    [self.mapView setShowsUserLocation:YES]; 
    isShowUserLocation = YES; 
} 

編輯2:

或者,使用CLLocationManager - 見this post。它允許你停止更新。包括CoreLocation.framework。不過,在使用MapView交互CLLocationManager時,可能需要處理一些細節問題。

+0

這個解決方案的問題是我想顯示用戶在地圖上的位置,所以如果我設置showsUserLocation = NO,那麼它不會彈出。但是,如果我離開它,那麼gps將不斷更新用戶位置,並在我不需要時重新調整我的地圖位置。有沒有辦法確保不使用此方法設置userLocation? – user2076774

+0

這就是爲什麼我使用isShowUserLocation(我創建的一個BOOL變量,而不是mapView的showsUserLocation屬性)來控制更新。它適用於剛纔描述的問題。我建議你嘗試一下,看看自己的結果。 – Rick

+0

感謝這個工程,我唯一的問題是這會增加電池壽命,因爲現在你不斷使用GPS和調用didupdateUserLocation? – user2076774

2

當你傳遞0對緯度和長,您將在海洋中的git現貨南加納在非洲。

+0

那麼,如何保證我在放大到該區域之前獲取mapview生成的用戶位置? – user2076774

相關問題