इवेंट

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

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 पर मैथड की पूरी सूची देखने के लिए, रेफ़रंस गाइड देखें.