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 options = GMSMapViewOptions() options.camera = camera let mapView = GMSMapView(options: options) 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]; GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = camera; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; 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:को कॉल करने के बाद कॉल किया जाता है. इसे कैमरे की इंटरमीडिएट पोज़िशन पास की जाती है.आखिर में,
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
static 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 पर उपलब्ध तरीकों की पूरी सूची जानने के लिए, रेफ़रंस गाइड देखें.