La fotocamera ti consente di modificare il punto di vista
dell'utente sulla mappa. Puoi utilizzare le modalità fotocamera per controllare il comportamento della mappa durante la navigazione. Per impostare la modalità fotocamera, imposta la proprietà cameraMode
della
visualizzazione mappa, specificando una delle seguenti costanti fotocamera:
Segui: la modalità fotocamera predefinita per la navigazione. Modifica l'angolo di visione a 45 gradi e posiziona la fotocamera dietro la posizione corrente rivolta nella direzione di marcia. Durante la navigazione, la videocamera si adatta automaticamente alla direzione di marcia. Anche premendo il pulsante Riposiziona della mappa viene attivata questa modalità. Il pulsante Ricentra non è visibile quando è selezionata questa modalità.
Panoramica: mostra una panoramica dell'intero percorso, con lo zoom necessario per adattarlo alla visualizzazione mappa. Quando questa vista è selezionata, è visibile il pulsante Ricentra.
Senza costi: consente all'utente di cambiare la visualizzazione della mappa con gesti. In questa visualizzazione la videocamera rimane ferma. La mappa entrerà automaticamente in questa visualizzazione se l'utente esegue la panoramica o lo zoom durante la navigazione. Quando questa vista è selezionata, è visibile il pulsante Ricentra.
Per cambiare la modalità fotocamera, imposta la proprietà cameraMode
della visualizzazione 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 muovono la mappa in modalità di navigazione, la modalità fotocamera per la visualizzazione della mappa passa dalla modalità seguente a quella senza costi. La fotocamera torna alla modalità seguente quando l'utente preme esplicitamente Ricentra. Puoi automatizzare il ritorno alla modalità seguente utilizzando un timer per impostare un intervallo tra l'uscita dalla modalità seguente e il ritorno automatico a quest'ultima.
Esempio
Il seguente esempio di codice verifica se la mappa viene spostata dall'utente in modalità di navigazione. In tal caso, imposta un timer per passare dalla modalità fotocamera alla modalità Segui, 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