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 pada 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 pergerakan. Selama navigasi, kamera otomatis menyesuaikan untuk menghadap ke arah perjalanan. Menekan tombol Pusatkan kembali pada peta juga akan mengalihkan ke mode ini. Tombol Pusatkan lagi tidak terlihat saat mode ini dipilih.

  • Overview — Menampilkan ringkasan seluruh rute, yang diperbesar sesuai kebutuhan agar rute sesuai dengan tampilan peta. Saat tampilan ini dipilih, tombol Re-center akan terlihat.

  • Gratis — Memungkinkan pengguna mengubah tampilan peta dengan gestur. Kamera akan tetap diam dalam tampilan ini. Peta akan otomatis masuk ke tampilan ini jika pengguna menggeser atau melakukan zoom selama navigasi. Jika tampilan ini dipilih, tombol Pusatkan lagi akan terlihat.

Untuk mengubah mode kamera, tetapkan properti cameraMode pada 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;

Memusatkan kembali peta secara otomatis

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

Contoh

Contoh kode berikut memeriksa untuk menentukan apakah peta digerakkan oleh pengguna saat dalam mode Navigasi. Jika ya, sistem akan menyetel timer untuk mengalihkan mode kamera ke mode berikut, yang akan 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