这是一篇很长的文字,所以我提前感谢你。
我有两个视图控制器:
我甚至尝试在视图加载时执行该方法并且它工作正常,所以问题是当从其他viewcontroller调用该方法时,我猜这是一个segue问题但我在谷歌或SO上找不到任何东西
这是应该更新位置的MainViewController方法。我再说一遍,该方法已执行,但mapview没有响应位置更改方法(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];
}
第二个viewcontroller中的方法是:
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
MainViewController *mainvc = [[MainViewController alloc] init];
[mainvc setPlazaOnMap:row];
[self.navigationController popViewControllerAnimated:YES];
}
再次,先谢谢。
答案 0 :(得分:1)
当您的应用启动时,您在导航控制器的堆栈上有一个MainViewController实例。
然后将SelectViewController的实例推送到堆栈上。
在didSelectRow方法中弹出SelectViewController,它会将您带回到MainViewController的原始实例。
问题是你的didSelectRow方法正在分配一个新的MainViewController实例,然后在其上调用setPlazaOnMap,而不是在原始实例上调用它。
要获得原始实例,您需要这样的内容:
UIViewController* rootViewController = [self.navigationController.viewControllers objectAtIndex: 0];
MainViewController* mainViewController = (MainViewController*)rootViewController;
然后调用setPlazaOnMap。
答案 1 :(得分:0)
您可以尝试更改
self.mapView.camera = camera;
到
self.mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
self.view = self.mapView;