Kamera, kullanıcının haritaya bakış açısını değiştirmenize olanak tanır. Gezinme sırasında haritanın davranışını kontrol etmek için kamera modlarını kullanabilirsiniz. Kamera modunu ayarlamak için harita görünümünün cameraMode
mülkünü ayarlayın ve aşağıdaki kamera modu sabitlerinden birini belirtin:
Takip: Gezinme için varsayılan kamera modu. Görüntü açısını 45 dereceye değiştirir ve kamerayı mevcut konumun arkasına, hareket yönüne bakacak şekilde yerleştirir. Navigasyon sırasında kamera, hareket yönüne bakacak şekilde otomatik olarak ayarlanır. Haritanın Yeniden ortala düğmesine basarak da bu moda geçebilirsiniz. Bu mod seçildiğinde Yeniden ortala düğmesi görünmez.
Genel bakış: Rotanın tamamına genel bir bakış gösterir. Rotayı harita görünümüne sığdırmak için gerektiğinde yakınlaştırır. Bu görünüm seçildiğinde Yeniden ortala düğmesi görünür.
Serbest: Kullanıcının harita görünümünü jestlerle değiştirmesine olanak tanır. Kamera bu görünümde sabit kalır. Kullanıcı gezinme sırasında kaydırma yaparsa veya yakınlaştırırsa harita otomatik olarak bu görünüme girer. Bu görünüm seçildiğinde Yeniden ortala düğmesi görünür.
Kamera modunu değiştirmek için harita görünümünün cameraMode
mülkünü burada gösterildiği gibi ayarlayın:
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;
Haritayı otomatik olarak yeniden ortala
Kullanıcılar haritayı Navigasyon modunda hareket ettirdiğinde, harita görünümünün kamera modu takip modundan serbest moduna geçer. Kullanıcı Yeniden ortala'ya açıkça bastığında kamera takip moduna geri döner. Takip modundan çıkıp otomatik olarak geri dönme arasında bir aralık belirlemek için zamanlayıcı kullanarak takip moduna geri dönme işlemini otomatikleştirebilirsiniz.
Örnek
Aşağıdaki kod örneği, navigasyon modundayken haritanın kullanıcı tarafından taşınıp taşınmadığını kontrol eder. Bu durumda, kamera modunu takip moduna geçirecek ve beş saniye sonra haritayı ortalı hale getirecek bir zamanlayıcı ayarlanır.
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