इवेंट

प्लैटफ़ॉर्म चुनें: Android iOS JavaScript

iOS के लिए Maps 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 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: को कॉल करने के बाद कॉल किया जाता है. इसे कैमरे की इंटरमीडिएट पोज़िशन दी जाती है.

  • आखिर में, 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

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 पर उपलब्ध तरीकों की पूरी सूची के बारे में जानने के लिए, रेफ़रंस गाइड देखें.