Kamera anpassen

Mit der Kamera können Sie die Nutzeransicht der Karte ändern. Mit Kameramodi können Sie das Verhalten der Karte während der Navigation steuern. Wenn Sie den Kameramodus festlegen möchten, legen Sie das Attribut cameraMode der Kartenansicht fest und geben Sie eine der folgenden Kameramoduskonstanten an:

  • Folgen: Der Standardkameramodus für die Navigation. Ändert den Blickwinkel auf 45 Grad und platziert die Kamera hinter der aktuellen Position in Fahrtrichtung. Während der Navigation wird die Kamera automatisch so ausgerichtet, dass sie in Fahrtrichtung zeigt. Wenn Sie auf der Karte auf Neu zentrieren tippen, wird ebenfalls in diesen 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 nach Bedarf, damit die Route in die Kartenansicht passt. Wenn diese Ansicht ausgewählt ist, wird die Schaltfläche Neu zentrieren angezeigt.

  • Free: Der Nutzer kann die Kartenansicht mit Gesten ä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, wird die Schaltfläche Neu zentrieren angezeigt.

Wenn Sie den Kameramodus ändern möchten, 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, wechselt der Kameramodus für die Kartenansicht vom Verfolgungsmodus in den manuellen Modus. Die Kamera kehrt in den Verfolgungsmodus zurück, wenn der Nutzer explizit auf Neu zentrieren drückt. Sie können die Rückkehr zum Folgemodus automatisieren, indem Sie mit einem Timer ein Intervall zwischen dem Verlassen des Folgemodus und der automatischen Rückkehr festlegen.

Beispiel

Im folgenden Codebeispiel wird geprüft, ob die Karte im Navigationsmodus vom Nutzer bewegt wird. Wenn ja, wird ein Timer festgelegt, um den Kameramodus auf den Verfolgungsmodus umzustellen 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