Kamera umożliwia zmianę punktu widzenia użytkownika
na mapie. Za pomocą trybów kamery możesz kontrolować zachowanie mapy podczas nawigacji. Aby ustawić tryb kamery, ustaw właściwość cameraMode widoku mapy, określając jedną z tych stałych trybu kamery:
Following (Śledzenie) – domyślny tryb kamery podczas nawigacji. Zmienia kąt widzenia na 45 stopni i ustawia kamerę za bieżącą pozycją, skierowaną w kierunku podróży. Podczas nawigacji kamera automatycznie dostosowuje się do kierunku podróży. Naciśnięcie przycisku Ponownie wyśrodkuj na mapie spowoduje również przełączenie na ten tryb. Gdy ten tryb jest wybrany, przycisk Ponownie wyśrodkuj jest niewidoczny.
Overview (Przegląd) – wyświetla przegląd całej trasy, w razie potrzeby powiększając widok, aby dopasować trasę do widoku mapy. Gdy ten widok jest wybrany, przycisk Ponownie wyśrodkuj jest widoczny.
Free (Swobodny) – umożliwia użytkownikowi zmianę widoku mapy za pomocą gestów. W tym widoku kamera pozostaje nieruchoma. Mapa automatycznie przejdzie do tego widoku, jeśli użytkownik przesunie lub powiększy mapę podczas nawigacji. Gdy ten widok jest wybrany, przycisk Ponownie wyśrodkuj jest widoczny.
Aby zmienić tryb kamery, ustaw właściwość cameraMode widoku mapy, jak pokazano poniżej:
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;
Automatyczne ponowne wyśrodkowanie mapy
Gdy użytkownicy przesuwają mapę w trybie nawigacji, tryb kamery widoku mapy zmienia się z trybu śledzenia na tryb swobodny. Kamera wraca do trybu śledzenia, gdy użytkownik wyraźnie naciśnie przycisk Ponownie wyśrodkuj. Możesz zautomatyzować powrót do trybu śledzenia, używając timera, aby ustawić odstęp czasu między opuszczeniem trybu śledzenia a automatycznym powrotem do niego.
Przykład
Ten przykładowy kod sprawdza, czy użytkownik przesuwa mapę w trybie nawigacji. Jeśli tak, ustawia timer, aby po 5 sekundach przełączyć tryb kamery na tryb śledzenia i wyśrodkować mapę.
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