Mit der Kamera können Sie die Nutzeransicht der Karte ändern. Mit den Kameramodi können Sie das Verhalten der Karte während der Navigation steuern. Um den Kameramodus festzulegen, legen Sie die Eigenschaft cameraMode der Kartenansicht fest und geben Sie eine der folgenden Konstanten für den Kameramodus an:
Folgen — Der Standardkameramodus für die Navigation. Ändert den Blickwinkel auf 45 Grad und positioniert die Kamera hinter der aktuellen Position in Fahrtrichtung. Während der Navigation wird die Kamera automatisch in Fahrtrichtung ausgerichtet. Wenn Sie auf der Karte auf die Schaltfläche Neu zentrieren klicken, wird ebenfalls zu diesem Modus gewechselt. Die Schaltfläche Neu zentrieren ist nicht sichtbar, wenn dieser Modus ausgewählt ist.
Übersicht — Zeigt eine Übersicht der gesamten Route an und zoomt bei Bedarf, um die Route in die Kartenansicht einzupassen. Wenn diese Ansicht ausgewählt ist, ist die Schaltfläche Neu zentrieren sichtbar.
Kostenlos — Ermöglicht dem Nutzer, die Kartenansicht mit Gesten zu ändern. Die Kamera bleibt in dieser Ansicht stationär. Die Karte wechselt automatisch in diese Ansicht, wenn der Nutzer während der Navigation schwenkt oder zoomt. Wenn diese Ansicht ausgewählt ist, ist die Schaltfläche Neu zentrieren sichtbar.
Um den Kameramodus zu ändern, legen Sie die Eigenschaft cameraMode der Kartenansicht fest, wie hier gezeigt:
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;
Karte automatisch neu zentrieren
Wenn Nutzer die Karte im Navigationsmodus verschieben, ändert sich der Kameramodus für die Kartenansicht vom Modus „Folgen“ in den Modus „Kostenlos“. Die Kamera kehrt in den Modus „Folgen“ zurück, wenn der Nutzer explizit auf Neu zentrieren klickt. Sie können die Rückkehr zum Modus „Folgen“ automatisieren, indem Sie mit einem Timer ein Intervall zwischen dem Verlassen des Modus „Folgen“ und der automatischen Rückkehr zu diesem Modus festlegen.
Beispiel
Im folgenden Codebeispiel wird geprüft, ob die Karte im Navigationsmodus vom Nutzer verschoben wird. Wenn dies der Fall ist, wird ein Timer festgelegt, um den Kameramodus nach fünf Sekunden in den Modus „Folgen“ zu ändern und die Karte zu zentrieren.
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