Kamera anpassen

Mit der Kamera können Sie die Nutzeransicht der Karte ändern. Mit den Kameramodi lässt sich 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 Kameramoduskonstanten an:

  • Folge ich: 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 stellt sich die Kamera automatisch in die Fahrtrichtung ein. Wenn Sie auf die Schaltfläche Neu zentrieren klicken, wird ebenfalls in diesen Modus gewechselt. Die Schaltfläche Neu zentrieren ist in diesem Modus nicht sichtbar.

  • Übersicht: Hier wird eine Übersicht der gesamten Route angezeigt. Die Route wird nach Bedarf vergrößert, damit sie in die Kartenansicht passt. Wenn diese Ansicht ausgewählt ist, ist die Schaltfläche Neu zentrieren sichtbar.

  • Kostenlos: Nutzer können die Kartenansicht mit Touch-Gesten ändern. Die Kamera bleibt in dieser Ansicht nicht beweglich. Wenn der Nutzer während der Navigation schwenkt oder zoomt, wechselt die Karte automatisch zu dieser Ansicht. 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, wechselt der Kameramodus für die Kartenansicht vom folgenden Modus in den kostenlosen Modus. Die Kamera kehrt in den Folgemodus zurück, wenn der Nutzer explizit auf Neu zentrieren klickt. Sie können das Zurückkehren in den folgenden Modus automatisieren, indem Sie mit einem Timer ein Intervall zwischen dem Verlassen des Folgemodus und dem automatischen Rückkehr festlegen.

Beispiel

Mit dem folgenden Codebeispiel wird geprüft, ob die Karte vom Nutzer im Navigationsmodus bewegt wird. Ist dies der Fall, wird ein Timer gestellt, um in den folgenden Modus umzuschalten. Dabei wird die Karte nach fünf Sekunden zentriert.

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