2012-12-31 63 views
3

將MKMapView放入UIViewController並將其設置爲衛星視圖時,地圖會放大並調整爲顯示用戶當前位於的整個國家:例如,美國爲如下所示。MKMapView:縮放到默認「國家級」

當用戶現在縮放地圖,或者我以編程方式縮放地圖時,似乎無法恢復此默認縮放級別。

當然,我可以找出這個默認縮放的座標,以便放大回到那個設置,但實際上我需要爲每個國家做這個事情,這是不值得的。

有人知道如何解決這個問題嗎?

MKMapView with default zoom level showing the United States

+0

你如何第一次獲得全國? – jcesarmobile

+0

這是MKMapView的默認行爲。只需將一個MKMapView放入一個UIViewController並點擊Build&Run即可。 – Patrick

回答

5

要做到這一點,它需要兩種類型的信息。所選國家的中心座標和在地圖上爲region.span設置的正確值。它可能有權訪問Apple Maps數據庫中的數據。我不知道這件事會被公佈給我們。但是如果你在網上搜索,那麼在互聯網上還有其他的地理編碼數據庫可能會給你這兩個值。

myMKMapView.region.center = // Center coordinates of country 
myMKMapView.region.span = // A value large enough to enclose the country. 
+0

謝謝懸崖!第一次調用mapViewDidFinishLoadingMap:mapView時,我現在將地圖的區域存儲在'NSUserDefaults'中(因爲這是地圖設置爲「國家縮放級別」的時間)。所以我可以在需要時使用存儲的區域。 請注意,您必須將'mapView.region.center'分割爲'mapView.region.span.latitudeDelta'和'mapView.region.span.longitudeDelta',並將'mapView.region.center'分割爲'mapView.region。 center.latitude'和'mapView.region.center.longitude',以便將它們存儲到你的'NSUserDefaults'中。 – Patrick

-1

你可以很簡單地節約viewDidAppear默認的區域,然後用它在需要的時候:

如果你找到一個有你想要什麼,然後你使用設置在地圖上}

class MyController: UIViewController { 
    @IBOutlet weak var mapView: MKMapView! 
    var defaultRegion: MKCoordinateRegion? 

    override func viewDidAppear(animated: Bool) { 
     defaultRegion = mapView.region 
    } 

    func showDefaultMapArea() { 
     if let region = defaultRegion { 
      mapView.setRegion(region, animated: true) 
     } 
    } 
+0

這不起作用 –

+0

應該在mapView委託回調中分配區域' - mapView:regionDidChangeAnimated:'而不是'viewDidAppear'因爲後者無法保證地圖視圖加載狀態 – Raymond

+0

好吧,我只是想表達一下想法,你可以「捕捉」默認區域並在以後使用它。你也可以使用mapView:regionDidChangeAnimated:(如果它最初被調用?),只需要確保只保存一次值,因爲該方法將在每個區域更改上調用,而不僅僅是初始值:} –