Google Maps iOS位置位于MapView的中心

时间:2019-06-19 14:40:25

标签: ios objective-c google-maps

我正在尝试在子视图中将Google Map加载到我的应用程序中。当我在iOS中初始化GMSMapView时,当前位置位于地图的左上角,而不是中心屏幕。如果我也要按“我的位置”按钮,这是正确的。

在手机上而不是模拟器上运行时,这似乎是一个问题。我如何获得它以便在中心正确设置?

我尝试重新排列代码并以不同方式加载地图。我认为这可能是由于“自动布局”约束所致,因为当我设置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

3 个答案:

答案 0 :(得分:0)

看起来您做得正确,我唯一不能确定的是您是否在子视图中正确放置了地图中心。但是,如果问题出在地图上,那么您可以尝试以下其他一些地图技巧:

   [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]];
    }

答案 1 :(得分:0)

对于任何想知道我最终找到解决该问题的方法的人。

我认为GPS初始化我的GPSViewController时,会出现自动布局的视框问题。设置视图后,我通过设置Google Map来避免此问题。我从UIView的自定义类中删除了GMSMapView,而是以编程方式手动创建了地图并将其添加到视图中。

在我的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];
}

答案 2 :(得分:0)

与您有相同的问题。我延迟init google mapview进行测试。并且它再次正常工作。

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.2 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    [self initGoogleMap];
});