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 la carte en spécifiant l'une des constantes de mode de caméra suivantes :
Suivi : 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 déplacement. Pendant la navigation, la caméra s'ajuste automatiquement pour faire face à la direction du déplacement. Vous pouvez également passer à ce mode en appuyant sur le bouton Recentrer de la carte. 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'ajuster à 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 fixe 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 la caméra, définissez la propriété cameraMode de la vue de 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 de navigation, le mode de la caméra pour la vue de la carte passe du mode Suivi au mode Libre. La caméra revient au mode de 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 sortie du mode Suivi et le retour automatique à ce mode.
Exemple
L'exemple de code suivant vérifie si l'utilisateur déplace la carte en mode Navigation. Si c'est le cas, il définit un minuteur pour passer en 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