2013-12-13 48 views
5

我想將地圖中心初始化爲自定義位置。下面是我使用的初始化代碼:如何設置在Storyboard中定義的GMSMapView對象的中心位置

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    //mapView 
    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:41.0109 
                  longitude:28.998 
                   zoom:6]; 
    self.mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; 
    [self.mapView setCenter:CGPointMake(41.0109,28.998)]; 
} 

當我運行這段代碼,只見中心格林威治而不是我給相機(41.0109,28.998)的位置的地圖。

當我調試代碼並打印出self.mapView.camera的位置時,輸出如下:GMSCameraPosition 0x17742ee0: target:(41.011, 28.998) bearing:0.000 zoomLevel:6.000 viewingAngle:0.000 lookAhead:0.000。所以我成功地設置了相機的位置,它爲什麼打開格林威治的位置?

編輯:

請注意,MapView的是一個子視圖(UIView的),我添加到主頁,我試圖設置和修改的中心位置。 這是我的故事板快照: enter image description here

當我嘗試修改mapView時,我無法設置地圖的位置。但是,如果我使用作爲窗口主視圖的「視圖」,則可以成功更改地圖的中心。

爲什麼會這樣?

如何設置GMSMapView的啓動位置?

編輯2 該項目的源代碼可以發現here

+0

你是否更新到最新版本的GoogleMaps.framework。 – Linuxios

+0

Linuxios,我正在使用cocoapods,這裏是我的PodFile:'pod「Google-Maps-iOS-SDK」,「〜> 1.6.1」'。它在[Google Maps iOS SDK](https://developers.google.com/maps/documentation/ios/start#getting_the_google_maps_sdk_for_ios)中說1.6.1是最新版本。 – ankakusu

+0

嘗試在方法的末尾添加對'[map startRendering]'的調用。看看是否有幫助。 – Linuxios

回答

6

您在結束了兩個GMSMapView對象。第一個是在Interface Builder中創建的,第二個是用-viewDidLoad方法中的GMSCameraPosition對象編程創建的。

似乎self.mapsView引用了您在Interface Builder中創建的視圖。當您爲此行分配新的GMSMapView對象時;

self.mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];

你實際上是失去了在界面生成器中創建的,所以你嘗試改變相機位置不工作,因爲你將消息發送給錯誤的對象。

也因爲在編程創建它之後沒有將第二個GMSMapView對象添加到視圖層次中,所以在-viewDidLoad方法中,您沒有在應用程序中看到它。儘管它正確設置了相機的位置。

所以你有兩個選擇; 1-從接口構建器中刪除mapView(並取消綁定它的插座),不要觸及代碼,而是替換此行;

[self.mapView setCenter:CGPointMake(41.0109,28.998)];

與此線;

[self.view addSubview:self.mapView];

,讓你有程序創建的地圖視圖。2-不要觸摸故事板,但刪除此行;

self.mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];

所以你就可以創建在Interface Builder地圖視圖,並配置它。

然後它會一切正常。

+0

完美答案! –

0

在添加GMSMapView或任何其他自定義視圖時,通常可以做到這一點,並且仍然希望使用Interface Builder的機制。是從IB庫中添加一個簡單的View,然後轉到身份檢查員並將類更改爲GMSMapView。你已經準備好了 - 你可以應用約束條件,爲你的ViewController創建一個插座等。

相關問題