Régler la caméra

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

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

  • Vue d'ensemble : affiche une vue d'ensemble de l'itinéraire complet, en effectuant un zoom si nécessaire pour l'adapter à la vue plan. Lorsque cette vue est sélectionnée, le bouton Recentrer est visible.

  • Sans frais : permet à l'utilisateur de modifier la vue de la carte à l'aide de gestes. Dans cette vue, la caméra reste immobile. La carte passe 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 Recentrer est visible.

Pour modifier le mode de l'appareil photo, 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 la carte automatiquement

Lorsque les utilisateurs déplacent la carte en mode Navigation, le mode caméra 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 Recentrer. Vous pouvez automatiser le retour au mode suivant en utilisant un minuteur pour définir un intervalle entre la sortie du mode suivant, puis le retour automatique.

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, un minuteur est défini pour faire passer le mode de la caméra au mode suivant, en centrant la carte au bout de 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