Maps SDK for iOS का इस्तेमाल करके, मैप पर होने वाले इवेंट को सुना जा सकता है. जैसे, कैमरे में बदलाव करने वाले इवेंट या मार्कर टैप करने वाले इवेंट.
परिचय
इवेंट सुनने के लिए, आपको 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:didChangeCameraPosition:
को जेस्चर या ऐनिमेशन के दौरान बार-बार कॉल किया जाता है. हालांकि, ऐसा हमेशाmapView:willMove:
को कॉल करने के बाद होता है. इसे कैमरे की इंटरमीडिएट पोज़िशन पास की जाती है.आखिर में,
mapView:idleAtCameraPosition:
को तब शुरू किया जाता है, जबGMSMapView
पर कैमरे की पोज़िशन में कोई बदलाव नहीं होता. साथ ही, यह कैमरे की सही पोज़िशन के बारे में बताता है. इस समय, सभी ऐनिमेशन और जेस्चर बंद हो जाते हैं.ऐप्लिकेशन इस इवेंट का इस्तेमाल, मार्कर या
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
पर उपलब्ध तरीकों की पूरी सूची के बारे में जानने के लिए, रेफ़रंस गाइड देखें.