Regola la videocamera

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

  • Segui: la modalità fotocamera predefinita per la navigazione. Modifica l'angolo di visione a 45 gradi e posiziona la fotocamera dietro la posizione corrente rivolta nella direzione di marcia. Durante la navigazione, la videocamera si adatta automaticamente alla direzione di marcia. Anche premendo il pulsante Riposiziona della mappa viene attivata questa modalità. Il pulsante Ricentra non è visibile quando è selezionata questa modalità.

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

  • Senza costi: consente all'utente di cambiare la visualizzazione della mappa con gesti. In questa visualizzazione la videocamera rimane ferma. La mappa entrerà automaticamente in questa visualizzazione se l'utente esegue la panoramica o lo zoom durante la navigazione. Quando questa vista è selezionata, è visibile il pulsante Ricentra.

Per cambiare la modalità fotocamera, imposta la proprietà cameraMode della visualizzazione mappa, come mostrato qui:

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 muovono la mappa in modalità di navigazione, la modalità fotocamera per la visualizzazione della mappa passa dalla modalità seguente a quella senza costi. La fotocamera torna alla modalità seguente quando l'utente preme esplicitamente Ricentra. Puoi automatizzare il ritorno alla modalità seguente utilizzando un timer per impostare un intervallo tra l'uscita dalla modalità seguente e il ritorno automatico a quest'ultima.

Esempio

Il seguente esempio di codice verifica se la mappa viene spostata dall'utente in modalità di navigazione. In tal caso, imposta un timer per passare dalla modalità fotocamera alla modalità Segui, 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