התאמת המצלמה

המצלמה מאפשרת לשנות את נקודת המבט של המשתמש במפה. אתם יכולים להשתמש במצבי מצלמה כדי לשלוט בהתנהגות של המפה במהלך הניווט. כדי להגדיר את מצב המצלמה, מגדירים את המאפיין cameraMode של תצוגת המפה, ומציינים אחת מהקבועים הבאים של מצב המצלמה:

  • מעקב – מצב ברירת המחדל של המצלמה לניווט. משנה את זווית הצפייה ל-45 מעלות וממקם את המצלמה מאחורי המיקום הנוכחי, כשהיא פונה לכיוון הנסיעה. במהלך הניווט, המצלמה משתנה אוטומטית כך שתפנה לכיוון הנסיעה. גם לחיצה על הכפתור מירכוז מחדש במפה תעביר אתכם למצב הזה. הלחצן הזזה למרכז לא מוצג כשבוחרים במצב הזה.

  • סקירה כללית – מוצגת סקירה כללית של המסלול כולו, עם שינוי גודל התצוגה לפי הצורך כדי שהמסלול יתאים לתצוגת המפה. כשבוחרים בתצוגה הזו, הכפתור מרכוז מחדש גלוי.

  • בחינם – המשתמש יכול לשנות את תצוגת המפה באמצעות מחוות. המצלמה נשארת קבועה בתצוגה הזו. המפה תעבור אוטומטית לתצוגה הזו אם המשתמש יזיז את המפה או ישנה את רמת הזום במהלך הניווט. כשבוחרים בתצוגה הזו, הכפתור מרכוז מחדש גלוי.

כדי לשנות את מצב המצלמה, מגדירים את המאפיין 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

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;

מרכוז אוטומטי של המפה

כשמשתמשים מזיזים את המפה במצב ניווט, מצב המצלמה בתצוגת המפה משתנה ממצב מעקב למצב חופשי. המצלמה חוזרת למצב מעקב כשהמשתמש לוחץ במפורש על מרכוז מחדש. אפשר להגדיר טיימר כדי להגדיר את פרק הזמן שיעבור בין היציאה ממצב מעקב לבין החזרה האוטומטית אליו, וכך להפוך את החזרה למצב מעקב לאוטומטית.

דוגמה

בדוגמת הקוד הבאה מתבצעת בדיקה כדי לקבוע אם המשתמש מזיז את המפה בזמן שהוא במצב ניווט. אם כן, מוגדר טיימר למעבר למצב מעקב במצלמה, והמפה ממוקמת במרכז אחרי חמש שניות.

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