Regola la videocamera

La fotocamera ti consente di cambiare il punto di vista della mappa per l'utente. Puoi usare 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 di modalità fotocamera:

  • Stai seguendo: la modalità predefinita della fotocamera 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 Ricentra sulla mappa passerai a questa modalità. Il pulsante Ricentra non è visibile quando è selezionata questa modalità.

  • Panoramica - Visualizza una panoramica dell'intero percorso, aumentando lo zoom per adattarlo alla visualizzazione mappa. Quando è selezionata questa visualizzazione, è visibile il pulsante Ricentra.

  • Senza costi: consente all'utente di modificare la visualizzazione 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 visualizzazione è selezionata, è visibile il pulsante Ricentra.

Per cambiare la modalità della 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 spostano la mappa in modalità di navigazione, la modalità della fotocamera per la visualizzazione mappa passa dalla modalità seguente a quella libera. 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à successiva, 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