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
dari 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 yang menghadap arah perjalanan. Selama navigasi, kamera akan otomatis menyesuaikan agar 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, yang dapat di-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 masuk ke tampilan ini jika pengguna menggeser atau melakukan zoom selama navigasi. Saat tampilan ini dipilih, tombol Pusatkan ulang 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 ulang peta secara otomatis
Saat pengguna memindahkan peta dalam mode Navigasi, mode kamera untuk tampilan peta akan berubah dari mode mengikuti ke mode bebas. Kamera kembali ke mode mengikuti saat pengguna secara eksplisit menekan Pusatkan ulang. Anda dapat mengotomatiskan kembali ke mode mengikuti dengan menggunakan timer untuk menetapkan interval antara keluar dari mode mengikuti, lalu kembali ke mode tersebut secara otomatis.
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, dengan 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