Regola la videocamera

L'icona Fotocamera consente di cambiare 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:

  • Seguente: la modalità videocamera predefinita per la navigazione. Modifica l'angolo di visualizzazione su 45 gradi e posiziona la fotocamera dietro la posizione attuale, rivolta in direzione di marcia. Durante la navigazione, la fotocamera si regola automaticamente per essere rivolta nella direzione di marcia. Anche premendo il pulsante Riposiziona della mappa si passa a questa modalità. Il pulsante Ricentra non è visibile quando viene selezionata questa modalità.

  • Panoramica: mostra una panoramica dell'intero percorso, aumentando lo zoom in base alle esigenze per adattarlo alla visualizzazione mappa. Quando questa visualizzazione è selezionata, viene visualizzato il pulsante Ricentra.

  • Libera: consente all'utente di modificare la vista mappa con gesti. La fotocamera rimane ferma in questa visualizzazione. La mappa passa automaticamente a questa vista se l'utente esegue la panoramica o lo zoom durante la navigazione. Quando viene selezionata questa visualizzazione, viene visualizzato il pulsante Ricentra.

Per modificare la modalità della fotocamera, 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;

Ricentrare automaticamente la mappa

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

Esempio

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