카메라 조정

카메라를 사용하면 사용자의 볼 수 있습니다. 카메라 모드를 사용하여 지도에 표시할 수 있습니다. 카메라 모드를 설정하려면 cameraMode 속성을 설정합니다. 지도뷰를 사용하여 다음 카메라 모드 상수 중 하나를 지정합니다.

  • 팔로우 중 — 탐색을 위한 기본 카메라 모드입니다. 뷰 변경 45도 각도로 하여 카메라를 현재 위치보다 안쪽으로 향하게 확인할 수 있습니다. 내비게이션 이용 중에 카메라가 자동으로 조정됩니다. 볼 수 있습니다. 지도의 다시 가운데 맞춤 버튼 누르기 도 이 모드로 전환됩니다. 다시 가운데 맞춤 버튼이 표시되지 않는 경우 이 모드가 선택됩니다.

  • 개요 - 필요에 따라 확대/축소하여 전체 경로의 개요를 표시합니다. 경로를 지도뷰에 맞춥니다. 이 뷰를 선택하면 다시 가운데 맞춤 버튼이 표시됨

  • 무료 - 사용자가 동작으로 지도뷰를 변경할 수 있도록 합니다. 이 뷰에서 카메라는 고정된 상태로 유지됩니다. 지도가 자동으로 사용자가 내비게이션 중에 화면을 이동하거나 확대/축소하면 이 뷰가 표시됩니다. 이 보기가 다시 가운데 맞춤 버튼이 보입니다.

카메라 모드를 변경하려면 지도뷰의 cameraMode 속성을 다음과 같이 설정하세요. 다음에 나와 있습니다.

Swift

// Set the mode to "overview":
mapView.cameraMode = .overview

// Set the mode to "free":
mapView.cameraMode = .free

// Set the mode to "following":
mapView.cameraMode = .following

Objective-C

// Set the mode to "overview":
mapView.cameraMode = GMSNavigationCameraModeOverview;

// Set the mode to "free":
mapView.cameraMode = GMSNavigationCameraModeFree;

// Set the mode to "following":
mapView.cameraMode = GMSNavigationCameraModeFollowing;

자동으로 지도의 중심 재설정

사용자가 내비게이션 모드에서 지도를 이동하면 지도의 카메라 모드 다음 모드에서 자유 모드로의 변경사항을 볼 수 있습니다. 카메라가 다시 따라가기로 사용자가 명시적으로 가운데 정렬을 누르면 모드가 변경됩니다. GCP 콘솔에서 타이머를 이용해 출발할 때까지의 간격을 설정하여 따라가기 모드로 돌아올 수 있습니다. 자동으로 해당 모드로 돌아갑니다.

다음 코드 예는 지도가 사용자에게 표시될 수 있습니다. 연결되어 있으면 타이머가 설정되어 카메라 모드를 따라가기 모드로 전환하고 5초 후 지도의 중심을 맞춥니다.

Swift

class YourViewController: UIViewController {

  @IBOutlet weak var mapView: GMSMapView!
  var autoFollowTimer: Timer!

  override func viewDidLoad() {
    super.viewDidLoad()
    mapView.delegate = self
    ...
  }

  ...
}

/** Implements the GMSMapViewDelegate protocol. */
extension YourViewController: GMSMapViewDelegate {
  func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
    if mapView.navigator?.isGuidanceActive == false {return}
    if !gesture {return}

    autoFollowTimer?.invalidate()
    autoFollowTimer = Timer(
      timeInterval: TimeInterval(5.0),
      target: self,
      selector: #selector(recenterMap),
      userInfo: nil,
      repeats: false)
    RunLoop.current.add(autoFollowTimer, forMode: .default)
  }

  /** Centers the map in guidance mode. */
  @objc private func recenterMap() {
    if mapView.navigator?.isGuidanceActive == true {
       mapView.cameraMode = .following
    }

    autoFollowTimer.invalidate()
    autoFollowTimer = nil
  }
}

Objective-C

@interface YourViewController : UIViewController<GMSMapViewDelegate>
...
@end


@implementation YourViewController {
  GMSMapView *_mapView;
  NSTimer *_autoFollowTimer;
  ...
}

...

- (void)viewDidLoad {
  [super viewDidLoad];
  ...
  _mapView.delegate = self;
  ...
}

...

/** Implements the GMSMapViewDelegate protocol. */
- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture {
  if (!_mapView.navigator.guidanceActive) return;
  if (!gesture) return;

  [_autoFollowTimer invalidate];
  _autoFollowTimer = [NSTimer scheduledTimerWithTimeInterval:5.0
                                                      target:self
                                                    selector:@selector(recenterMap)
                                                    userInfo:nil
                                                     repeats:NO];
}

/** Centers the map in guidance mode. */
- (void)recenterMap {
  if (_mapView.navigator.guidanceActive) {
    _mapView.cameraMode = GMSNavigationCameraModeFollowing;
  }

  [_autoFollowTimer invalidate];
  _autoFollowTimer = nil;
}

@end