Kamerayı ayarlama

Kamera, kullanıcının haritadaki bakış açısını değiştirmenize olanak tanır. Navigasyon 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 ayarlayarak aşağıdaki kamera modu sabit değerlerinden birini belirtin:

  • Takip ediliyor — Navigasyon için varsayılan kamera modu. Görüş açısını 45 derece olarak değiştirir ve kamerayı seyahat yönüne bakan mevcut konumun arkasına yerleştirir. Navigasyon sırasında kamera, seyahat yönüne yöne göre otomatik olarak ayarlanır. Haritanın Yeniden ortala düğmesine bastığınızda da bu moda geçiş yapılır. Bu mod seçildiğinde Yeniden ortala düğmesi görünmez.

  • Genel Bakış — Rotanın harita görünümüne sığması için gerektiğinde yakınlaştırarak tüm rotaya dair bir genel bakış görüntüler. Bu görünüm seçildiğinde Yeniden ortala düğmesi görünür.

  • Ücretsiz: Kullanıcının hareketlerle harita görünümünü değiştirmesine olanak tanır. Bu görünümde kamera sabit kalır. Kullanıcı navigasyon sırasında görüntüyü kaydırır 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 ö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 haritayı Navigasyon modunda hareket ettirdiğinde, harita görünümünün kamera modu, aşağıdaki moddan serbest moda geçer. Kullanıcı açıkça Yeniden ortala'ya bastığında kamera aşağıdaki moda döner. Bir sonraki moddan çıkma ve ardından otomatik olarak bu moda dönme arasında bir aralık ayarlamak için zamanlayıcı kullanarak aşağıdaki moda dönüşü otomatikleştirebilirsiniz.

Örnek

Aşağıdaki kod örneği, haritanın Navigasyon modundayken kullanıcı tarafından hareket edip etmediğini kontrol eder. Etkinse, kamera modunu aşağıdaki moda geçirmek için bir zamanlayıcı ayarlar ve haritayı beş saniye sonra ortalar.

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