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

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

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

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

  • رایگان - به کاربر اجازه می‌دهد نمای نقشه را با حرکات تغییر دهد. دوربین در این نما ثابت می‌ماند. اگر کاربر در حین پیمایش، صفحه را حرکت دهد یا بزرگنمایی کند، نقشه به طور خودکار وارد این نما می‌شود. وقتی این نما انتخاب شود، دکمهٔ «بازگرداندن به مرکز» قابل مشاهده است.

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

سویفت

// 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;

نقشه را به طور خودکار جدیدتر کنید

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

مثال

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

سویفت

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