התאמת המצלמה

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

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

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

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

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