A câmera permite mudar o ponto de vista do usuário do mapa. É possível usar os modos de câmera para controlar o comportamento do mapa durante a navegação. Para definir o modo da câmera, defina a propriedade cameraMode
da visualização do mapa, especificando uma das seguintes constantes do modo da câmera:
Following: o modo de câmera padrão para navegação. Muda o ângulo de visualização para 45 graus e coloca a câmera atrás da posição atual, de frente para a direção de deslocamento. Durante a navegação, a câmera se ajusta automaticamente para apontar na direção do trajeto. Pressionar o botão Re-center do mapa também vai alternar para esse modo. O botão Recentralizar não fica visível quando esse modo é selecionado.
Visão geral: mostra uma visão geral de todo o trajeto, aumentando o zoom conforme necessário para ajustar o trajeto à visualização do mapa. Quando essa visualização é selecionada, o botão Re-center fica visível.
Livre: permite que o usuário mude a visualização do mapa com gestos. A câmera permanece parada nessa visualização. O mapa vai entrar automaticamente nessa visualização se o usuário mover ou ampliar o zoom durante a navegação. Quando essa visualização é selecionada, o botão Re-center fica visível.
Para mudar o modo da câmera, defina a propriedade cameraMode
da visualização do mapa, conforme
mostrado aqui:
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;
Recentralizar o mapa automaticamente
Quando os usuários movem o mapa no modo de navegação, o modo da câmera para a visualização do mapa muda do modo de acompanhamento para o modo livre. A câmera retorna ao modo de acompanhamento quando o usuário pressiona explicitamente Re-center. É possível automatizar o retorno ao modo de acompanhamento usando um timer para definir um intervalo entre a saída do modo de acompanhamento e o retorno automático a ele.
Exemplo
O exemplo de código a seguir verifica se o mapa está sendo movido pelo usuário no modo de navegação. Se estiver, ele vai definir um timer para mudar o modo da câmera para o modo de acompanhamento, centralizando o mapa após cinco segundos.
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