تنظیم کردن دوربین

دوربین به شما امکان می‌دهد نقطه دید کاربر از نقشه را تغییر دهید. می‌توانید از حالت‌های دوربین برای کنترل رفتار نقشه درطول ناوبری استفاده کنید. برای تنظیم حالت دوربین، ویژگی cameraMode نمای نقشه را تنظیم کنید و یکی از ثابت‌های حالت دوربین زیر را مشخص کنید:

  • دنبال کردن — حالت پیش‌فرض دوربین برای پیمایش. زاویه دید را به ۴۵ درجه تغییر می‌دهد و دوربین را پشت موقعیت فعلی قرار می‌دهد و جهت حرکت را نشان می‌دهد. درطول ناوبری، دوربین به‌طور خودکار تنظیم می‌شود تا در جهت سفر قرار بگیرد. با فشار دادن دکمه مرکزیابی دوباره نقشه نیز به این حالت می‌روید. وقتی این حالت انتخاب شده باشد، دکمه مرکز کردن مجدد نمایان نیست.

  • نمای کلی — نمای کلی کل مسیر را نمایش می‌دهد و درصورت نیاز بزرگ‌نمایی می‌کند تا مسیر در نمای نقشه جا شود. وقتی این نما انتخاب شود، دکمه مرکز کردن مجدد نمایان می‌شود.

  • آزاد — به کاربر اجازه می‌دهد نمای نقشه را با اشاره‌ها تغییر دهد. دوربین در این نما ثابت می‌ماند. اگر کاربر درطول پیمایش، نقشه را حرکت دهد یا بزرگ‌نمایی کند، نقشه به‌طور خودکار وارد این نما می‌شود. وقتی این نما انتخاب شود، دکمه مرکز کردن مجدد نمایان می‌شود.

برای تغییر حالت دوربین، ویژگی cameraMode نمای نقشه را به‌صورت زیر تنظیم کنید:

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

آبجکتیو-سی

// Set the mode to "overview":
mapView.cameraMode = GMSNavigationCameraModeOverview;

// Set the mode to "free":
mapView.cameraMode = GMSNavigationCameraModeFree;

// Set the mode to "following":
mapView.cameraMode = GMSNavigationCameraModeFollowing;

بازمرکزیابی خودکار نقشه

وقتی کاربران نقشه را در حالت «ناوبری» حرکت می‌دهند، حالت دوربین برای نمای نقشه از حالت دنبال کردن به حالت آزاد تغییر می‌کند. وقتی کاربر صریحاً مرکز کردن مجدد را فشار می‌دهد، دوربین به حالت دنبال کردن برمی‌گردد. می‌توانید بااستفاده از زمان‌سنج برای تنظیم فاصله زمانی بین ترک حالت دنبال کردن و سپس بازگشت خودکار به آن، بازگشت به حالت دنبال کردن را خودکار کنید.

مثال

نمونه کد زیر بررسی می‌کند که آیا نقشه توسط کاربر درحین قرار داشتن در حالت «ناوبری» جابه‌جا می‌شود یا نه. اگر روشن باشد، زمان‌سنجی تنظیم می‌کند تا حالت دوربین را به حالت دنبال کردن تغییر دهد و نقشه را پس‌از پنج ثانیه در مرکز قرار دهد.

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
  }
}

آبجکتیو-سی

@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