2011-04-22 66 views
11

我有一個MKMapView,並在地圖視圖中設置「顯示用戶位置」。如果應用程序應該使用我的位置,我會說是的。然後我看到藍色的子彈,我可以放大到當前的位置。MKMapView:在啓動用戶位置 - >縮放

我讀了很多關於此的其他文章,但沒有解決問題,用戶位置不會自動放大。

如果用戶允許訪問位置,我想在啓動時進行縮放,否則定義的座標應該放大。(之後,使用允許位置,它可以更新,但不應該將中心設置爲每次我獲得位置更新時用戶的位置)。

實現此行爲的步驟是什麼?我試過這樣的例子:How do I zoom an MKMapView to the users current location without CLLocationManager?與KVO,但它不工作...

我希望有人有一個想法?

最好的問候,蒂姆

+0

對於iOS 5.0和更高:[MapView的setUserTrackingMode:MKUserTrackingModeFollow動畫:YES]; – Arjan 2015-02-26 15:11:19

回答

24

你有沒有嘗試過的委託方法的MapView:didUpdateUserLocation :?

我曾經在我的代碼是這樣的:

在.h文件:

@property (nonatomic, retain) CLLocation* initialLocation; 

而在.m文件:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    if (!initialLocation) 
    { 
     self.initialLocation = userLocation.location; 

     MKCoordinateRegion region; 
     region.center = mapView.userLocation.coordinate; 
     region.span = MKCoordinateSpanMake(0.1, 0.1); 

     region = [mapView regionThatFits:region]; 
     [mapView setRegion:region animated:YES]; 
    } 
} 
+0

我有我的錯誤,它適用於4.x,但不適用於3.x. :-(但是,如果userLocation不可用(因爲沒有GPS或用戶不允許使用該位置),我怎樣才能將座標設置爲固定位置? – Tim 2011-04-22 17:11:14

+0

'mapView:didUpdateUserLocation:'在iOS 4.0及更高版本中可用,所以如果你的目標是3.x,那麼你運氣不好。 – 2011-04-22 17:20:20

+1

我在我的應用程序中做了類似的事情,但順序不同,我放大到默認位置FIRST。然後,如果用戶允許並且GPS得到修復,放大到用戶位置,如果沒有,地圖停留在默認位置,什麼也沒有發生,這對您的情況有意義嗎? – 2011-04-22 17:24:34

2

,你可以做這樣的在您的viewDidLoad中寫下這個代碼

self.mapDetail.showsUserLocation = YES; 
[self.mapDetail.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.mapDetail.userLocation.coordinate; 

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

    [self.mapDetail setRegion:region animated:YES]; 
    [self.mapDetail.userLocation removeObserver:self forKeyPath:@"location"]; 
}