Régler la caméra

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

  • Suivi : mode d'appareil photo par défaut pour la navigation. Modifie la vue à 45 degrés et place la caméra derrière la position actuelle, face à le sens du voyage. Pendant la navigation, la caméra ajuste automatiquement dans la direction du voyage. Appuyer sur le bouton Recentrer de la carte passera également à 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 faisant un zoom si nécessaire. pour adapter l'itinéraire à 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 entre automatiquement cette vue si l'utilisateur fait un panoramique ou un zoom pendant la navigation. Lorsque cette vue est le bouton Recentrer est visible.

Pour modifier le mode de l'appareil photo, définissez la propriété cameraMode de la vue plan, comme suit : comme illustré ici:

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 Appareil photo de la carte voir les modifications du mode suivant au mode sans frais. La caméra revient à l'état suivant lorsque l'utilisateur appuie explicitement sur Recentrer. Vous pouvez automatiser revenir au mode suivant en utilisant un minuteur pour définir un intervalle entre chaque sortie suivant, puis y retournera automatiquement.

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 règle un minuteur pour passer au mode suivi, 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