Regolare la videocamera

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

  • Segui: la modalità videocamera predefinita per la navigazione. Modifica l'angolo di visualizzazione a 45 gradi e posiziona la fotocamera dietro la posizione corrente, rivolta verso la direzione di viaggio. Durante la navigazione, la videocamera si regola automaticamente per essere rivolta nella direzione di viaggio. Puoi passare a questa modalità anche premendo il pulsante Riposiziona della mappa. Il pulsante Ricentra non è visibile quando questa modalità è selezionata.

  • Panoramica: mostra una panoramica dell'intero percorso, con lo zoom necessario per adattarlo alla visualizzazione mappa. Quando questa visualizzazione è selezionata, il pulsante Ricentra è visibile.

  • Free: consente all'utente di modificare la visualizzazione della mappa con i gesti. La videocamera rimane fissa in questa visualizzazione. La mappa entrerà automaticamente in questa visualizzazione se l'utente esegue una panoramica o uno zoom durante la navigazione. Quando questa visualizzazione è selezionata, il pulsante Ricentra è 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;

Ricentra automaticamente la mappa

Quando gli utenti spostano la mappa in modalità di navigazione, la modalità della fotocamera per la visualizzazione della mappa cambia da modalità di monitoraggio a modalità libera. La videocamera torna alla modalità di monitoraggio quando l'utente preme esplicitamente Ricentra. Puoi automatizzare il ritorno alla modalità Segui utilizzando un timer per impostare un intervallo tra l'uscita dalla modalità Segui e il ritorno automatico.

Esempio

L'esempio di codice seguente verifica se la mappa viene spostata dall'utente in modalità di navigazione. In questo caso, imposta un timer per passare alla modalità di visualizzazione della videocamera, 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