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

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

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

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

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

برای تغییر حالت دوربین، ویژگی 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

هدف-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;

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

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

مثال

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

سویفت

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

هدف-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