התאמת המצלמה

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