2014-03-30 56 views
4

我想在使用MKMapView的setRegion的iOS應用程序中設置自定義起始區域。該應用程序運行良好,並出現一張地圖,但無論我嘗試什麼,我都無法讓該地區改變。我已經嘗試了很多教程和解決方案,但都沒有工作。這裏是我的代碼:MKMapView setRegion不工作

-(void)viewDidAppear:(BOOL)animated{ 
    MKCoordinateRegion region; 
    MKCoordinateSpan span; 
    span.latitudeDelta = 0.001; 
    span.longitudeDelta = 0.001; 

    region.span = span; 
    region.center.latitude = 100; 
    region.center.longitude = 100; 

    [mapView setRegion:(region) animated:(TRUE)]; 
} 

我已經加入到適當的項目的MKMapView和核心定位框架,我進口MapKit.h,和我宣佈MapView的,所以我不知道爲什麼它不工作。

謝謝

雅各

+0

BOOL值是YES和NO,所以TRUE不是你應該在這裏使用的。爲什麼你在括號中有變量?另外,使用幫助函數MKCoordinateSpanMake和MKCoordinateRegionMake。 –

+0

@AdamEberbach我已經實施了您的建議,但仍然無法正常工作。下面是新的代碼: ' - (無效)viewDidAppear:(BOOL)動畫{' 'MKCoordinateRegion區域= MKCoordinateRegionMake(CLLocationCoordinate2DMake(26,80),MKCoordinateSpanMake(0。001,0.001));' '[MapView的setRegion:區域動畫:YES];' '}' – jspiegel

回答

3

這聽起來像地圖視圖的IBOutlet中沒有連接到在廈門國際銀行/故事板地圖視圖控制。

如果沒有連接,mapView變量將是nil,並且調用它的方法將不會執行任何操作。

在xib/storyboard中,右鍵單擊View Controller並將mapView插座連接到地圖視圖控件。



另外,雖然沒有必要只設置區域,也地圖視圖的 delegate插座連接到視圖控制器。如果稍後實現任何地圖視圖委託方法,這將是必需的。如果沒有完成,委託方法將不會被調用。


另一個單獨的點:
在你的第一個代碼示例,您設置該地區的center至100,100。請注意,這是一個無效的座標。如果地圖視圖實際上已連接,則將center設置爲此將導致「無效區域」崩潰。緯度必須從-90到+90(經度必須從-180到+180)。

順便說一下,您在發表評論(26,80)時在代碼中嘗試的新座標是在印度。由於您將範圍設置爲相對較小的值,因此您需要縮小範圍才能看到此值。

+0

不幸的是它仍然不工作。當我右鍵單擊View Controller時,我沒有看到任何mapView插座,只有「查看」。我控制拖動視圖控制到MKMapView,並將其設置爲「視圖」。我也控制拖動MKMapView到View Controller並將其設置爲委託。對不起,我們的第一個iOS應用程序直接在xCode中工作,以前我只使用Unity並導出到xCode。 – jspiegel

+0

如何在.h文件中聲明'mapView'?它是否在'MKMapView * mapView'前面有「IBOutlet」這個詞? – Anna

+0

順便說一句,_don't_將MKMapView連接到視圖控制器的視圖。將視圖重新連接回MKMapView所在的主視圖。 – Anna

0

然而,它被設置爲回答,我會在這裏給我一個例子,當我不知道爲什麼setRegion根本沒有工作。在我的情況下,問題是我發起的MKMapView沒有一個框架,例如:

override func viewDidLoad() { 
    ... 
    self.mapView = MKMapView() // Wrong! 
    ... 
    self.mapView.setRegion(...) // Does not work! 
} 

它看起來像整個區域的東西與問候的初始(CGRect)計算。它對我很有幫助:

override func viewDidLoad() { 
    ... 
    self.mapView = MKMapView(frame: CGRect(0, 108, self.mapView.bounds.width, self.mapView.bounds.height)) 
    self.mapView.setRegion(...) // Oh, it works! 
} 

這個問題被描述爲here了。

相關問題