La videocamera ti consente di modificare il punto di vista dell'utente sulla mappa. Puoi utilizzare le modalità della videocamera per controllare il comportamento della
mappa durante la navigazione. Per impostare la modalità della videocamera, imposta la proprietà cameraMode
della
visualizzazione della mappa specificando una delle seguenti costanti della modalità della videocamera:
Segui: la modalità della videocamera predefinita per la navigazione. Modifica l'angolo di visualizzazione a 45 gradi e posiziona la videocamera dietro la posizione attuale, rivolta nella direzione di marcia. Durante la navigazione, la videocamera si regola automaticamente per puntare nella direzione di marcia. Se premi il pulsante Ricentra della mappa, passerai anche a questa modalità. Il pulsante Ricentra non è visibile quando è selezionata questa modalità.
Panoramica: mostra una panoramica dell'intero percorso, eseguendo lo zoom necessario per adattare il percorso alla visualizzazione della mappa. Quando questa visualizzazione è selezionata, è visibile il pulsante Ricentra.
Senza costi: consente all'utente di modificare la visualizzazione della mappa con i gesti. In questa visualizzazione, la videocamera rimane fissa. La mappa passerà automaticamente a questa visualizzazione se l'utente esegue panoramiche o aumenta/diminuisce lo zoom durante la navigazione. Quando questa visualizzazione è selezionata, il pulsante Ricentra è visibile.
Per modificare la modalità della videocamera, imposta la proprietà cameraMode
della visualizzazione della mappa, come
mostrato qui:
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;
Ricentra automaticamente la mappa
Quando gli utenti spostano la mappa in modalità Navigazione, la modalità della videocamera per la visualizzazione della mappa passa dalla modalità di inseguimento alla modalità libera. La videocamera torna alla modalità di inseguimento quando l'utente preme esplicitamente Ricentra. Puoi automatizzare il ritorno alla modalità Segui utilizzando un timer per impostare un intervallo tra l'uscita dalla modalità Segui e il ritorno automatico.
Esempio
Il seguente esempio di codice verifica se la mappa viene spostata dall'utente in modalità Navigazione. In caso affermativo, imposta un timer per passare alla modalità di seguimento della fotocamera, centrando la mappa dopo cinque secondi.
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