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 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 veya yakınlaştırma yaparsa 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 çıkma ve otomatik olarak geri dönme arasında bir aralık ayarlamak 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