我正在尝试在子视图中将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
答案 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];
});