2015-01-28 6 views
0

이것은 긴 텍스트이므로 미리 감사드립니다.지도보기에서 카메라 위치를 업데이트하지 않습니다. animateToLocation을 사용하지 않습니다.

나는 두 개의 뷰 컨트롤러가 있습니다

  1. 가 MainViewController : 사용자가 도시 이름을 입력하고 위치가 그 도시로 변경 검색 텍스트 필드와 Google지도보기을 가지고, 내가 방법을 사용하는 번역 도시 이름을 Google의 지오 코딩 서비스를 사용하여 위도와 경도로 변환합니다. 여기 모든 것이 잘 작동합니다.
  2. SelectAreaViewController :이 VC는 푸시 세그먼트를 사용하여 액세스되며, 8 개의 간단한 행 (영역)이있는 선택기보기가 있습니다. 사용자가 행을 선택하면 자동으로 닫히고 MainViewController의 메소드를 실행하여지도보기 위치를 업데이트합니다. 여기에 문제가 있습니다. 메서드가 실행되지만지도보기 위치가 업데이트되지 않습니다. 나는 animateToLocation을 사용하고 "카메라"속성을 설정하려고했지만 작동하지 않습니다.

나는보기가로드 될 때 메서드를 실행 해 보았습니다. 문제가 있으므로 다른 viewcontroller에서 메서드가 호출 될 때 문제가 발생합니다. 문제가있는 것 같지만 아무 것도 찾을 수 없습니다. google 또는 SO.

위치를 업데이트해야하는 MainViewController 메소드입니다. 반복하지만 메서드가 실행되지만 mapview가 위치 변경 메서드 (animateToLocation) 나 카메라 설정에 응답하지 않습니다. 다시, 미리 감사

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

    [mainvc setPlazaOnMap:row]; 


    [self.navigationController popViewControllerAnimated:YES]; 
} 

:

-(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의 방법이있다.

답변

1

을 변경하려고 할 수 있습니다.

그런 다음 SelectViewController의 인스턴스를 스택으로 푸시합니다.

당신의 didSelectRow 메서드에서 SelectViewController가 튀어 나오면, MainViewController의 원래 인스턴스로 되돌아갑니다.

문제는 didSelectRow 메서드가 MainViewController의 새 인스턴스를 할당 한 다음 원래 인스턴스에서 호출하는 대신 setPlazaOnMap을 호출한다는 것입니다.

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

가 그런 다음에 setPlazaOnMap 전화 :

은 원래의 인스턴스가이 같은 뭔가가 필요 거라고 얻으려면.

+0

그게 다야! 고맙습니다! 그것은 매력처럼 작동했습니다. – Chuy

0

당신은 당신의 응용 프로그램이 시작 당신이 탐색 컨트롤러의 스택에 MainViewController의 인스턴스가있는 경우 귀하의

self.mapView.camera = camera; 

self.mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; self.view = self.mapView;

+0

고맙습니다.하지만 작동하지 않았습니다. – Chuy