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 la caméra, définissez la propriété cameraMode
de la vue de carte en spécifiant l'une des constantes de mode de caméra suivantes :
Suivre : mode 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'oriente automatiquement dans le sens de la marche. 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'itinéraire complet, en effectuant un zoom si nécessaire pour l'adapter à la vue de la carte. Lorsque cette vue est sélectionnée, le bouton Recentrer est visible.
Free : permet à l'utilisateur de modifier la vue de la carte à l'aide de gestes. Dans cette vue, la caméra reste fixe. 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 la caméra, définissez la propriété cameraMode
de la vue de carte, comme indiqué 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 automatiquement la carte
Lorsque les utilisateurs déplacent la carte en mode Navigation, le mode caméra de la vue de la carte passe du mode Suivi au mode Libre. La caméra revient en mode Suivi lorsque l'utilisateur appuie explicitement sur Recentrer. Vous pouvez automatiser le retour au mode Suivi en utilisant un minuteur pour définir un intervalle entre la désactivation du mode Suivi et son activation 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, il définit un minuteur pour passer en mode suivi et recentrer 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