Sesuaikan kamera

Kamera memungkinkan Anda mengubah sudut pandang pengguna terhadap peta. Anda dapat menggunakan mode kamera untuk mengontrol perilaku peta selama navigasi. Untuk menetapkan mode kamera, tetapkan properti cameraMode tampilan peta, dengan menentukan salah satu konstanta mode kamera berikut:

  • Mengikuti — Mode kamera default untuk navigasi. Mengubah sudut tampilan menjadi 45 derajat dan menempatkan kamera di belakang posisi saat ini menghadap ke arah perjalanan. Selama navigasi, kamera secara otomatis menyesuaikan untuk menghadap ke arah perjalanan. Menekan tombol Pusatkan lagi pada peta juga akan mengalihkan ke mode ini. Tombol Pusatkan kembali tidak terlihat saat mode ini dipilih.

  • Ringkasan — Menampilkan ringkasan keseluruhan rute, yang diperbesar sesuai kebutuhan agar rute sesuai dengan tampilan peta. Setelah tampilan ini dipilih, tombol Re-center akan terlihat.

  • Gratis — Memungkinkan pengguna mengubah tampilan peta dengan gestur. Kamera tetap tidak bergerak dalam tampilan ini. Peta akan otomatis memasuki tampilan ini jika pengguna menggeser atau melakukan zoom selama navigasi. Jika tampilan ini dipilih, tombol Pusatkan kembali akan terlihat.

Untuk mengubah mode kamera, tetapkan properti cameraMode tampilan peta, seperti yang ditunjukkan di sini:

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;

Pusatkan kembali peta secara otomatis

Saat pengguna menggerakkan peta dalam mode Navigasi, mode kamera untuk tampilan peta akan berubah dari mode berikut menjadi mode bebas. Kamera kembali ke mode berikutnya jika pengguna menekan Re-center secara eksplisit. Anda dapat mengotomatiskan kembali ke mode berikut dengan menggunakan timer untuk menyetel interval antara keluar dari mode berikut, lalu kembali secara otomatis ke mode tersebut.

Contoh

Contoh kode berikut memeriksa apakah peta sedang dipindahkan oleh pengguna saat dalam mode Navigasi. Jika ya, timer akan menyetel timer untuk mengalihkan mode kamera ke mode berikut, dan memusatkan peta setelah lima detik.

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