התאמת המצלמה

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

מרכוז המפה באופן אוטומטי

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

דוגמה

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

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