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. Um den Kameramodus festzulegen, legen Sie die cameraMode
-Eigenschaft der Kartenansicht fest und geben Sie eine der folgenden Kameramoduskonstanten an:
Folgen: Der Standardkameramodus für die Navigation. Ändert den Blickwinkel auf 45° und positioniert 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 die Schaltfläche Neu zentrieren tippen, wird ebenfalls in diesen Modus gewechselt. Die Schaltfläche Neu zentrieren ist nicht sichtbar, wenn dieser Modus ausgewählt ist.
Übersicht: Hier wird eine Übersicht der gesamten Route angezeigt. Die Karte wird bei Bedarf so gezoomt, dass die Route in die Kartenansicht passt. Wenn diese Ansicht ausgewählt ist, wird die Schaltfläche Neu zentrieren angezeigt.
Kostenlos: Der Nutzer kann die Kartenansicht mit Gesten ändern. Die Kamera bleibt in dieser Ansicht an ihrem Platz. 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 Neu zentrieren angezeigt.
Um den Kameramodus zu ändern, 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 Folgemodus in den kostenlosen Modus. Die Kamera kehrt in den Folgemodus zurück, wenn der Nutzer explizit auf Neu zentrieren drückt. Du kannst die Rückkehr in den Folgemodus automatisieren, indem du einen Timer verwendest, um ein Intervall zwischen dem Verlassen des Folgemodus und der automatischen Rückkehr in diesen Modus festzulegen.
Beispiel
Das folgende Codebeispiel prüft, ob die Karte im Navigationsmodus vom Nutzer verschoben wird. Wenn das der Fall ist, wird ein Timer eingestellt, um den Kameramodus nach fünf Sekunden in den Folgemodus 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