La caméra vous permet de modifier le point de vue de l'utilisateur sur la carte. Vous pouvez utiliser les modes d'appareil photo 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 la caméra suivantes:
Suivant : 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 de marche. Pendant la navigation, la caméra s'ajuste automatiquement pour faire face à la direction de votre trajet. 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é.
Vue d'ensemble : affiche un aperçu de l'ensemble du trajet, en effectuant un zoom si nécessaire pour l'adapter à la vue cartographique. 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 fait 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 la carte, comme illustré 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 de la caméra pour la vue de la carte passe du mode Suivi au mode Libre. L'appareil photo revient en mode suivi lorsque l'utilisateur appuie explicitement sur Recadrer. Vous pouvez automatiser le retour en mode Suivre à l'aide d'un minuteur pour définir un intervalle entre la sortie du mode Suivre et le retour automatique dans ce mode.
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 passer en mode suivi, et la carte est centrée 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