Menyesuaikan kamera

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

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

  • Ringkasan — Menampilkan ringkasan seluruh rute, melakukan zoom sesuai kebutuhan agar rute sesuai dengan tampilan peta. Saat tampilan ini dipilih, tombol Pusatkan ulang akan terlihat.

  • Gratis — Memungkinkan pengguna mengubah tampilan peta dengan gestur. Kamera tetap diam dalam tampilan ini. Peta akan otomatis memasuki tampilan ini jika pengguna menggeser atau melakukan zoom selama navigasi. Saat 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;

Memusatkan ulang peta secara otomatis

Saat pengguna memindahkan peta dalam mode Navigasi, mode kamera untuk tampilan peta berubah dari mode mengikuti ke mode bebas. Kamera kembali ke mode mengikuti saat pengguna menekan Pusatkan ulang secara eksplisit. Anda dapat mengotomatiskan kembali ke mode mengikuti dengan menggunakan timer untuk menetapkan interval antara keluar dari mode mengikuti, lalu otomatis kembali ke mode tersebut.

Contoh

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