iOS के लिए मैप SDK का इस्तेमाल करके, आप मैप पर आने वाले इवेंट सुन सकते हैं, जैसे कैमरे में बदलाव के इवेंट या मार्कर टैप इवेंट.
सुविधा के बारे में जानकारी
इवेंट सुनने के लिए, आपको
GMSMapViewDelegate
प्रोटोकॉल लागू करना होगा. आम तौर पर, मैप दिखाने वाले व्यू कंट्रोलर पर
यह प्रोटोकॉल लागू किया जाता है. नीचे उदाहरण देखें:
Swift
import GoogleMaps class Events: UIViewController, GMSMapViewDelegate { // ... }
Objective-C
@import GoogleMaps; @interface Events : UIViewController <GMSMapViewDelegate> @end
GMSMapView
बनने के बाद, आप उसका ऐक्सेस अपने व्यू कंट्रोलर को दे सकते हैं. GMSMapViewDelegate
सिर्फ़ वैकल्पिक तरीके उपलब्ध कराता है. किसी खास इवेंट को सुनने के लिए, आपको उस इवेंट में बताए गए काम के तरीके को लागू करना होगा.
Swift
override func loadView() { super.loadView() let camera = GMSCameraPosition.camera( withLatitude: 1.285, longitude: 103.848, zoom: 12 ) let mapView = GMSMapView.map(withFrame: .zero, camera: camera) mapView.delegate = self self.view = mapView } // MARK: GMSMapViewDelegate func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) { print("You tapped at \(coordinate.latitude), \(coordinate.longitude)") }
Objective-C
- (void)loadView { [super loadView]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:1.285 longitude:103.848 zoom:12]; GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; mapView.delegate = self; self.view = mapView; } #pragma mark - GMSMapViewDelegate - (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate { NSLog(@"You tapped at %f,%f", coordinate.latitude, coordinate.longitude); }
कैमरे की स्थिति
GMSMapViewDelegate
का इस्तेमाल करके, आप मैप को रेंडर करने के लिए इस्तेमाल किए जाने वाले कैमरे की स्थिति में बदलाव सुन सकते हैं. यहां तीन अलग-अलग इवेंट हैं.
mapView:willMove:
बताता है कि कैमरे की पोज़िशन बदलने वाली है. अगरgesture
आर्ग्युमेंटYES
पर सेट है, तो ऐसा उपयोगकर्ता केGMSMapView
पर स्वाभाविक जेस्चर (हाव-भाव) करने से होता है. जैसे, पैन या झुकाव. अगर ऐसा नहीं है, तोNO
बताता है कि यह प्रोग्रामेटिक बदलाव का हिस्सा है - उदाहरण के लिए,animateToCameraPosition:
जैसे तरीकों से या सीधे मैप की लेयर को अपडेट करना. यह तब भीNO
हो सकता है, जब किसी उपयोगकर्ता ने 'मेरी जगह' या 'कम्पास' बटन पर टैप किया हो, जो कैमरे को बदलने वाले ऐनिमेशन जनरेट करते हैं.यह तरीका
mapView:idleAtCameraPosition:
के शुरू होने से पहले कई बार इस्तेमाल किया जा सकता है. हालांकि, ऐसा आम तौर पर सिर्फ़ तब होता है, जब ऐनिमेशन और हाथ के जेस्चर एक ही समय में होते हैं. उदाहरण के लिए, हाथ के जेस्चर (हाव-भाव) की वजह से, मौजूदा ऐनिमेशन रद्द हो जाएगा औरmapView:willMove:
को दूसरी बार कॉल किया जाएगा.mapView:willMove:
पर कॉल करने के बाद, हाथ के जेस्चर या ऐनिमेशन के दौरान,mapView:didChangeCameraPosition:
को बार-बार कॉल किया जाता है. इसे बीच के कैमरे की स्थिति में पास किया गया है.आखिर में, जब
GMSMapView
पर कैमरे की स्थिति काम नहीं करती है, तोmapView:idleAtCameraPosition:
शुरू करता है. साथ ही, कैमरे की सही स्थिति भी बताता है. अब सभी ऐनिमेशन और जेस्चर बंद हो गए हैं.ऐप्लिकेशन इस इवेंट का इस्तेमाल,
GMSMapView
पर दिखाए जा रहे मार्कर या अन्य कॉन्टेंट को रीफ़्रेश करने के लिए कर सकते हैं. उदाहरण के लिए, कैमरे में मौजूद हर बदलाव के बाद कॉन्टेंट को फिर से लोड करना.
उदाहरण के लिए, ऐप्लिकेशन GMSMapView
को चलते-चलते साफ़ कर सकता है और फिर कैमरे को जिस स्थिति में रखना चाहता है उसे उलटा कर सकता है.
Swift
let geocoder = GMSGeocoder() func mapView(_ mapView: GMSMapView, willMove gesture: Bool) { mapView.clear() } func mapView(_ mapView: GMSMapView, idleAt cameraPosition: GMSCameraPosition) { geocoder.reverseGeocodeCoordinate(cameraPosition.target) { (response, error) in guard error == nil else { return } if let result = response?.firstResult() { let marker = GMSMarker() marker.position = cameraPosition.target marker.title = result.lines?[0] marker.snippet = result.lines?[1] marker.map = mapView } } }
Objective-C
GMSGeocoder *geocoder; - (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture { [mapView clear]; } - (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)cameraPosition { id handler = ^(GMSReverseGeocodeResponse *response, NSError *error) { if (error != nil) { return; } GMSReverseGeocodeResult *result = response.firstResult; GMSMarker *marker = [GMSMarker markerWithPosition:cameraPosition.target]; marker.title = result.lines[0]; marker.snippet = result.lines[1]; marker.map = mapView; }; [geocoder reverseGeocodeCoordinate:cameraPosition.target completionHandler:handler]; }
कारोबार के इवेंट और अन्य लोकप्रिय जगहें
बेस मैप पर डिफ़ॉल्ट रूप से, लोकप्रिय जगह के आइकॉन (पीओआई) दिखते हैं. साथ ही, आइकॉन भी दिखते हैं. पीओआई में पार्क, स्कूल, सरकारी इमारतें वगैरह शामिल हैं. यहां कारोबार के पीओआई जैसे कि दुकानें, रेस्टोरेंट, और होटल भी शामिल हैं.
पीओआई पर मौजूद क्लिक इवेंट के लिए जवाब दिया जा सकता है. कारोबारों और दूसरी लोकप्रिय जगहों के लिए गाइड देखें.
अन्य इवेंट
GMSMapViewDelegate
पर मैथड की पूरी सूची देखने के लिए, रेफ़रंस गाइड देखें.