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