2013-12-13 14 views
5

Chcę zainicjować środek mapy w niestandardowej lokalizacji. Oto kod, który używam do inicjalizacji:Jak ustawić położenie środkowe obiektu GMSMapView zdefiniowanego w Storyboard

-(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)]; 
} 

Kiedy uruchomić ten kod, widziałem mapę skoncentrowany na Greenwich zamiast pozycji, którą dałem do kamery (41.0109,28.998).

Po debugowaniu kodu i wydrukowaniu pozycji self.mapView.camera jest to wynik: GMSCameraPosition 0x17742ee0: target:(41.011, 28.998) bearing:0.000 zoomLevel:6.000 viewingAngle:0.000 lookAhead:0.000. Tak więc udało mi się ustawić lokalizację kamery, dlaczego otwiera ją lokalizacja Greenwich?

Edit:

Należy pamiętać, że MapView jest podrzędny (UIView), które dodałem do strony głównej i starałem się ustawiać i modyfikować położenie środka. Oto migawki z moich ujęć: enter image description here

Kiedy próbuję modyfikować MapView, nie mogę ustawić lokalizację mapy. Jeśli jednak używam "widoku", który jest głównym widokiem okna, mogę z powodzeniem zmienić środek mapy.

Dlaczego to jest przyczyną?

Jak ustawić pozycję startową GMSMapView?

Edycja 2 Kod źródłowy dla tego projektu można znaleźć here

+0

Czy zaktualizowałeś swoją najnowszą wersję GoogleMaps.framework? – Linuxios

+0

Linuxios, używam cocoapods i tutaj jest mój PodFile: 'pod" Google-Maps-iOS-SDK "," ~> 1.6.1 "'. W pakiecie [Google Maps iOS SDK] (https://developers.google.com/maps/documentation/ios/start#getting_the_google_maps_sdk_for_ios) jest napisane, że 1.6.1 jest najnowszą wersją. – ankakusu

+0

Spróbuj dodać wywołanie '[map startRendering]' na końcu metody. Sprawdź, czy to pomaga. – Linuxios

Odpowiedz

6

zakończyło się z dwóch GMSMapView obiektów. Pierwszy to ten, który został utworzony w programie Interface Builder, a drugi to program utworzony programowo przy pomocy metody GMSCameraPosition w metodzie -viewDidLoad.

Wygląda na to, że self.mapsView odwołuje się do widoku utworzonego za pomocą Konstruktora interfejsu. Po przypisaniu nowego obiektu GMSMapView tym wierszem;

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

jesteś rzeczywiście traci ten, który jest tworzony w konstruktorze Interface, więc próba zmiany położenia kamery nie działa, ponieważ jesteś wysyłania wiadomości do niewłaściwego obiektu.

Również z powodu braku dodania drugiego obiektu GMSMapView do hierarchii widoku po jej zaprogramowaniu programowo, w metodzie -viewDidLoad, nie widzisz jej w swojej aplikacji. Chociaż ustawia prawidłowo pozycję kamery.

Masz dwie opcje;

1- Usuń mapView z konstruktora interfejsu (i uwolnij jego ujście) i nie dotykaj kodu, ale zastąp ten wiersz;

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

z tej linii;

[self.view addSubview:self.mapView];

tak, że będziesz mieć widok Mapa tworzona programowo.

2- Nie dotykaj scenorysu, ale usuń tę linię;

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

Więc będziesz tworzenia widoku mapy interfejs Builder i konfigurowanie go.

Wtedy wszystko będzie dobrze.

+0

idealna odpowiedź! –

0

Co możesz zrobić, na ogół, dodając GMSMapView lub dowolny inny niestandardowy widok niestandardowy, a nadal chcesz korzystać z mechanizmów Konstruktora interfejsu. Czy dodać jeden prosty View z biblioteki IB, a następnie przejść do Identity Inspector i zmienić klasę na GMSMapView. Jesteś gotowy - możesz zastosować ograniczenia, utworzyć ujście do swojego kontrolera ViewController itp.

Powiązane problemy