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