gpt4 book ai didi

ios - map View 不更新相机位置,也不使用 animateToLocation

转载 作者:行者123 更新时间:2023-11-29 02:20:34 25 4
gpt4 key购买 nike

这是一篇很长的文章,所以我提前谢谢你。

我有两个 View Controller :

  1. MainViewController:有一个带有搜索文本字段的 Google map View ,用户可以在其中输入城市名称并将位置更改为该城市,我使用一种方法,使用 google 的地理编码服务将城市名称转换为纬度和经度。这里一切正常。
  2. SelectAreaViewController:这个 VC 是使用 push segue 访问的,它有一个带有 8 个简单行(区域)的选择器 View 。当用户选择一行时,它会自动关闭,然后它会在 MainViewController 上执行一个方法来更新 map View 位置。这是问题所在。该方法已执行,但 map View 位置未更新。我试过使用 animateToLocation 并设置“相机”属性,但它不起作用。

我什至尝试在加载 View 时执行该方法并且它工作正常,所以问题是当从另一个 View Controller 调用该方法时,我猜这是一个 segue 问题但我在谷歌或 SO 上找不到任何东西.

这是应该更新位置的 MainViewController 方法。我重复一遍,该方法已执行,但 map View 未响应位置更改方法 (animateToLocation) 或相机设置。

-(void)setPlazaOnMap:(NSInteger)plazaNum
{
double lat;
double lng;
NSString *plazaNombre;

switch (plazaNum) {
case 0:
NSLog(@"Plaza 1");
plazaNombre = @"Aguascalientes";
lat = 21.8852562;
lng = -102.2915677;
break;

case 1:
NSLog(@"Plaza 2");
plazaNombre = @"León";
lat = 21.1250077;
lng = -101.6859605;
break;
case 2:
NSLog(@"Plaza 3");
plazaNombre = @"San Luis Potosí";
lat = 22.1564699;
lng = -100.9855409;
break;
case 3:
NSLog(@"Plaza 4");
plazaNombre = @"Querétaro";
lat = 20.5887932;
lng = -100.3898881;
break;
case 4:
NSLog(@"Plaza 5");
plazaNombre = @"Monterrey";
lat = 25.6866142;
lng = -100.3161126;
break;
case 5:
NSLog(@"Plaza 6");
plazaNombre = @"Saltillo";
lat = 25.4267244;
lng = -100.9954254;
break;
case 6:
NSLog(@"Plaza 7");
plazaNombre = @"Torreón";
lat = 25.5428443;
lng = -103.4067861;
break;
case 7:
NSLog(@"Plaza 8");
plazaNombre = @"Cancún";
lat = 21.161908;
lng = -86.8515279;
break;
case 8:
NSLog(@"Plaza 9");
plazaNombre = @"Guadalajara";
lat = 20.6596988;
lng = -103.3496092;
break;

default:
lat = 20.6596988;
lng = -103.3496092;
break;
}

NSLog(@"lat %f",lat);
NSLog(@"lng %f",lng);


GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:lat longitude:lng zoom:12];
self.mapView.camera = camera;

// [self.mapView animateToLocation:CLLocationCoordinate2DMake(lat, lng)];
// [self.mapView animateToZoom:10];

}

第二个 View Controller 中的方法是这样的:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
MainViewController *mainvc = [[MainViewController alloc] init];

[mainvc setPlazaOnMap:row];


[self.navigationController popViewControllerAnimated:YES];
}

再次感谢您。

最佳答案

当您的应用程序启动时,您在导航 Controller 的堆栈上有一个 MainViewController 实例。

然后将 SelectViewController 的实例压入堆栈。

在您的 didSelectRow 方法中,您弹出 SelectViewController,这会将您带回到 MainViewController 的原始实例。

问题是您的 didSelectRow 方法正在分配 MainViewController 的新实例,然后在该实例上调用 setPlazaOnMap,而不是在原始实例上调用它。

要获得原始实例,您需要这样的东西:

UIViewController* rootViewController = [self.navigationController.viewControllers objectAtIndex: 0];
MainViewController* mainViewController = (MainViewController*)rootViewController;

然后在上面调用 setPlazaOnMap。

关于ios - map View 不更新相机位置,也不使用 animateToLocation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28197639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com