Kamera anpassen

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. Legen Sie den Kameramodus fest, indem Sie die Eigenschaft cameraMode der Kartenansicht mit einer der folgenden Kameramoduskonstanten festlegen:

  • Tracking: Der Standardkameramodus für die Navigation. Der Blickwinkel wird auf 45 Grad geändert und die Kamera wird hinter der aktuellen Position in Fahrtrichtung platziert. Während der Navigation richtet sich die Kamera automatisch in Fahrtrichtung aus. Sie können auch auf die Schaltfläche Karte auf meinen Standort zentrieren klicken, um in diesen Modus zu wechseln. Die Schaltfläche Zentriert anzeigen ist in diesem Modus nicht sichtbar.

  • Übersicht: Hier sehen Sie eine Übersicht der gesamten Route. Sie können heranzoomen, um die Route in die Kartenansicht einzupassen. Wenn diese Ansicht ausgewählt ist, wird die Schaltfläche Zur Mitte ausrichten angezeigt.

  • Kostenlos: Nutzer können die Kartenansicht mit Gesten ändern. Die Kamera bleibt in dieser Ansicht stationär. Die Karte wird automatisch in dieser Ansicht angezeigt, wenn der Nutzer während der Navigation schwenkt oder zoomt. Wenn diese Ansicht ausgewählt ist, wird die Schaltfläche Zur Mitte ausrichten angezeigt.

Wenn Sie den Kameramodus ändern möchten, legen Sie die cameraMode-Eigenschaft 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 Tracking-Modus in den kostenlosen Modus. Die Kamera kehrt zum Tracking-Modus zurück, wenn der Nutzer ausdrücklich auf Um Nutzerstandort zentrieren drückt. Sie können die Rückkehr zum Modus „Im Blick behalten“ automatisieren, indem Sie mit einem Timer ein Intervall zwischen dem Verlassen des Modus und der automatischen Rückkehr festlegen.

Beispiel

Im folgenden Codebeispiel wird geprüft, ob die Karte vom Nutzer im Navigationsmodus verschoben wird. Ist das der Fall, wird ein Timer gestartet, um den Kameramodus in den Tracking-Modus zu wechseln und die Karte nach fünf Sekunden 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