Regolare la videocamera

La videocamera ti consente di modificare il punto di vista dell'utente sulla mappa. Puoi utilizzare le modalità della videocamera per controllare il comportamento della mappa durante la navigazione. Per impostare la modalità della videocamera, imposta la proprietà cameraMode della visualizzazione mappa, specificando una delle seguenti costanti della modalità della videocamera:

  • Following: la modalità della videocamera predefinita per la navigazione. Modifica l'angolo di visualizzazione a 45 gradi e posiziona la videocamera dietro la posizione attuale, rivolta nella direzione di marcia. Durante la navigazione, la videocamera si regola automaticamente per essere rivolta nella direzione di marcia. Se premi il pulsante Riposiziona della mappa, passerai anche a questa modalità. Il pulsante Riposiziona non è visibile quando è selezionata questa modalità.

  • Overview: mostra una panoramica dell'intero percorso, eseguendo lo zoom in base alle esigenze per adattare il percorso alla visualizzazione mappa. Quando è selezionata questa visualizzazione, il pulsante Riposiziona è visibile.

  • Free: consente all'utente di modificare la visualizzazione mappa con i gesti. In questa visualizzazione, la videocamera rimane fissa. La mappa entrerà automaticamente in questa visualizzazione se l'utente esegue una panoramica o lo zoom durante la navigazione. Quando è selezionata questa visualizzazione, il pulsante Riposiziona è visibile.

Per modificare la modalità della videocamera, imposta la proprietà cameraMode della visualizzazione mappa, come mostrato di seguito:

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;

Riposizionare automaticamente la mappa

Quando gli utenti spostano la mappa in modalità di navigazione, la modalità della videocamera per la visualizzazione mappa passa dalla modalità Following alla modalità Free. La videocamera torna alla modalità Following quando l'utente preme esplicitamente Riposiziona. Puoi automatizzare il ritorno alla modalità Following utilizzando un timer per impostare un intervallo tra l'uscita dalla modalità Following e il ritorno automatico a questa modalità.

Esempio

L'esempio di codice seguente verifica se la mappa viene spostata dall'utente in modalità di navigazione. In caso affermativo, imposta un timer per passare alla modalità della videocamera Following, centrando la mappa dopo cinque secondi.

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