Régler la caméra

La caméra vous permet de modifier le point de vue de l'utilisateur de 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 la caméra, définissez la propriété cameraMode de la vue plan, en spécifiant l'une des constantes de mode de caméra suivantes:

  • Suivi : mode de navigation par défaut de l'appareil photo. Modifie l'angle de vue sur 45 degrés et oriente la caméra derrière la position actuelle dans la direction du déplacement. Pendant la navigation, la caméra s'ajuste automatiquement dans le sens du trajet. Appuyez sur le bouton Recenter (Centrer) de la carte pour passer à ce mode. Le bouton Recenter (Recentrer) n'est pas visible lorsque ce mode est sélectionné.

  • Vue d'ensemble : affiche une vue d'ensemble de l'itinéraire dans son intégralité, en zoomant si nécessaire pour l'adapter à la vue plan. Lorsque cette vue est sélectionnée, le bouton Recenter (Recentrer) s'affiche.

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

Pour modifier le mode de la caméra, définissez la propriété cameraMode de la vue plan, 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 Appareil photo de la vue de la carte passe du mode suivant au mode Sans frais. La caméra revient au mode suivant lorsque l'utilisateur appuie explicitement sur Recenter (Recentrer). Vous pouvez automatiser le retour au mode suivant en utilisant un minuteur pour définir un intervalle entre la sortie du mode suivant et le retour automatique.

Exemple

L'exemple de code suivant permet de déterminer si l'utilisateur déplace la carte en mode Navigation. Si c'est le cas, elle règle un minuteur pour basculer le mode de la caméra sur le mode suivant, 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