Ajuster la caméra

La caméra vous permet de modifier le point de vue de l'utilisateur sur la carte. Vous pouvez utiliser les modes de caméra pour contrôler le comportement de la carte pendant la navigation. Pour définir le mode de caméra, définissez la propriété cameraMode de la vue de la carte en spécifiant l'une des constantes de mode de caméra suivantes :

  • Suivi : mode de caméra par défaut pour la navigation. Modifie l'angle de vue à 45 degrés et place la caméra derrière la position actuelle, face à la direction du trajet. Pendant la navigation, la caméra s'ajuste automatiquement pour faire face à la direction du trajet. Appuyer sur le bouton Recentrer de la carte permet également de passer à ce mode. Le bouton Recentrer n'est pas visible lorsque ce mode est sélectionné.

  • Aperçu : affiche un aperçu de l'ensemble du trajet, en zoomant si nécessaire pour l'adapter à la vue de la carte. Lorsque cette vue est sélectionnée, le bouton Recentrer est visible.

  • Libre : permet à l'utilisateur de modifier la vue de la carte à l'aide de gestes. La caméra reste immobile dans cette vue. La carte passe automatiquement à cette vue si l'utilisateur effectue un panoramique ou un zoom pendant la navigation. Lorsque cette vue est sélectionnée, le bouton Recentrer est visible.

Pour modifier le mode de caméra, définissez la propriété cameraMode de la vue de la carte, comme indiqué ci-dessous :

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;

Recentrer automatiquement la carte

Lorsque les utilisateurs déplacent la carte en mode Navigation, le mode de caméra de la vue de la carte passe du mode Suivi au mode Libre. La caméra revient au mode Suivi lorsque l'utilisateur appuie explicitement sur Recentrer. Vous pouvez automatiser le retour au mode Suivi à l'aide d'un minuteur pour définir un intervalle entre la sortie du mode Suivi et le retour automatique à ce mode.

Exemple

L'exemple de code suivant vérifie si la carte est déplacée par l'utilisateur en mode Navigation. Si c'est le cas, il définit un minuteur pour passer le mode de caméra au mode Suivi, en centrant la carte après cinq secondes.

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