התאמת המצלמה

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