Kamerayı ayarlama

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 özelliğini ayarlayın ve aşağıdaki kamera modu sabitlerinden birini belirtin:

  • Takip: Navigasyon için varsayılan kamera modu. Görüş açısını 45 dereceye çıkarır ve kamerayı, mevcut konumun arkasına, seyahat yönüne bakacak şekilde yerleştirir. Navigasyon sırasında kamera, seyahat yönüne doğru otomatik olarak ayarlanır. Haritanın Yeniden ortala düğmesine basıldığında da bu moda geçilir. Bu mod seçildiğinde Yeniden ortala düğmesi görünmez.

  • Genel bakış: Rotanın tamamına genel bakışı gösterir. Rotayı harita görünümüne sığdırmak için gerektiği kadar yakınlaştırır. Bu görünüm seçildiğinde Yeniden ortala düğmesi görünür.

  • Ücretsiz: Kullanıcının harita görünümünü hareketlerle değiştirmesine olanak tanır. Bu görünümde kamera sabit kalır. Kullanıcı, navigasyon sırasında kaydırma veya yakınlaştırma yaparsa harita otomatik olarak bu görünüme geçer. 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 özelliğini 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 ortalama

Kullanıcılar Navigasyon modunda haritayı hareket ettirdiğinde, harita görünümünün kamera modu takip modundan serbest moda geçer. Kullanıcı Yeniden ortala'yı açıkça tıkladığında kamera, takip moduna döner. Takip etme modundan çıkma ve otomatik olarak geri dönme arasında bir aralık belirlemek için zamanlayıcı kullanarak takip etme 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çirmek için zamanlayıcı ayarlanır ve beş saniye sonra harita ortalanı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