Google Maps iOS Расположение по центру в углу MapView - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь загрузить карту Google в свое приложение в рамках подпредставления.Когда я инициализирую свой GMSMapView в iOS, текущее местоположение находится в верхнем левом углу карты вместо центрального экрана.Это верно, если бы я также нажал кнопку «Мое местоположение».

Это кажется проблемой при работе на моих телефонах, но не на симуляторах.Как получить так, чтобы он был правильно настроен в центре?

Я пробовал переставлять код и загружать карту по-другому.Я думаю, что это может быть связано с ограничениями Autolayout, как, например, когда я устанавливаю mapView.translatesAutoresizingMaskIntoConstraints = true;, местоположение находится в центре, но мой вид испорчен.

В настоящее время у меня настроен GMSMapView как пользовательский класс моего представления с автоматическими ограничениями макета, настроенными для его изменения.Я загружаю свой класс GPS и устанавливаю кадр с этим.

gpsVC = [[GPSViewController alloc] init];
gpsVC.view.frame=CGRectMake(0, CGRectGetMaxY(self.segmentTopView.frame), CGRectGetWidth(self.mainView.frame), CGRectGetHeight(self.mainView.frame)-CGRectGetHeight(self.topView.frame)-CGRectGetMaxY(self.segmentTopView.frame));
[self.segmentView addSubview:gpsVC.view];

И в моем GPSViewController я настраиваю камеру карты следующим образом:

self.mapView.myLocationEnabled = YES;
GMSCameraPosition *camera=[GMSCameraPosition cameraWithLatitude:myLocation.coordinate.latitude longitude:myLocation.coordinate.longitude zoom:[mapDefaultZoomLevel floatValue]];
self.mapView.camera=camera;

Кто-нибудь еще испытывает это,и нашли ли вы какое-либо решение этой проблемы?

Редактировать: Вот несколько изображений (ссылки, потому что я пока не могу вставить изображения)

https://imgur.com/FEMfwri
https://imgur.com/ySQio5b
https://imgur.com/9kijxbT

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

для тех, кто интересуется, в конце концов я нашел обходное решение для моей проблемы.

Я полагаю, что во время инициализации моего GPSViewController возникла проблема с рамкой вида при автоматическом размещении. Я избежал этой проблемы, настроив свою Карту Google после того, как мой вид был настроен. Я удалил GMSMapView из пользовательского класса своего UIView и вместо этого программно создал карту вручную и добавил ее в представление.

В моем MasterViewController.m:

gpsVC = [[GPSViewController alloc] init];
gpsVC.view.frame=CGRectMake(0, CGRectGetMaxY(self.segmentTopView.frame), CGRectGetWidth(self.segmentView.frame), CGRectGetHeight(self.segmentView.frame)-CGRectGetHeight(self.segmentTopView.frame));
[gpsVC setupMap];

В моем GPSViewController.m (сокращенно):

-(void)setupMap{
   GMSCameraPosition *camera=[GMSCameraPosition cameraWithLatitude:coordinate.latitude longitude:coordinate.longitude zoom:mapDefaultZoomLevel];
   self.mapView = [GMSMapView mapWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame)) camera:camera];
   self.mapView.myLocationEnabled = YES;
   self.mapView.settings.myLocationButton = YES;
   self.mapView.settings.compassButton = YES;
   self.mapView.delegate=self;
   [self.myView addSubview:self.mapView];
}
0 голосов
/ 19 июня 2019

Похоже, вы делаете это правильно, единственное, что я не могу точно сказать, правильно ли вы центрировали свою карту в дополнительном представлении.Но вот некоторые другие уловки карты, которые вы можете попробовать, если проблема с картой:

   [self.mapView clear];

    // Set map view and display
    double zoom = 14;

    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:[myLocation.latitude doubleValue]
                                                            longitude:[myLocation.longitude doubleValue]
                                                                 zoom:zoom];

    // Initialize Map View
    self.mapView.camera = camera;
    self.mapView.myLocationEnabled = YES;

    __block GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] init];

   //You can try setting a couple of points east and west of your current location and including them in the bounds


    CLLocation westLocation = myLocation;
    westLocation.longitude += .005; 
    CLLocation eastLocation = myLocation;
    eastLocation.longitude -= .005;       

    bounds = [bounds includingCoordinate:myLocation.position];
    bounds = [bounds includingCoordinate:eastLocation.position];
    bounds = [bounds includingCoordinate:westLocation.position];

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        [self.mapView animateWithCameraUpdate:[GMSCameraUpdate fitBounds:bounds withPadding:40.0f]];
    } else {
        [self.mapView animateWithCameraUpdate:[GMSCameraUpdate fitBounds:bounds withPadding:100.0f]];
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...