कैमरे की मदद से, मैप को देखने के लिए उपयोगकर्ता के नज़रिए को बदला जा सकता है. नेविगेशन के दौरान मैप के व्यवहार को कंट्रोल करने के लिए, कैमरा मोड का इस्तेमाल किया जा सकता है. कैमरा मोड सेट करने के लिए, मैप व्यू की 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