जानकारी विंडो

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

मार्कर के ऊपर दिखने वाली जानकारी वाली विंडो.

जानकारी वाली विंडो की मदद से, मार्कर पर टैप करने वाले उपयोगकर्ता को जानकारी दिखाई जा सकती है.

जानकारी वाली विंडो, डिवाइस की स्क्रीन पर मार्कर के ऊपर बीच में दिखाई देती है. जानकारी वाली डिफ़ॉल्ट विंडो में, टाइटल बोल्ड में दिखता है. इसके नीचे स्निपेट टेक्स्ट दिखता है.

जानकारी वाली विंडो का कॉन्टेंट, मार्कर की title और snippet प्रॉपर्टी से तय होता है. अगर title और snippet प्रॉपर्टी, दोनों खाली हैं या nil हैं, तो मार्कर पर क्लिक करने से जानकारी वाली विंडो नहीं दिखती.

एक बार में सिर्फ़ एक जानकारी वाली विंडो दिखती है. अगर कोई उपयोगकर्ता किसी दूसरे मार्कर पर टैप करता है, तो मौजूदा विंडो छिप जाती है और नई जानकारी वाली विंडो खुल जाती है. अगर उपयोगकर्ता किसी ऐसे मार्कर पर क्लिक करता है जिसकी जानकारी वाली विंडो पहले से दिख रही है, तो वह विंडो बंद हो जाती है और फिर से खुल जाती है.

अतिरिक्त टेक्स्ट या इमेज जोड़ने के लिए, जानकारी वाली कस्टम विंडो बनाएं. जानकारी वाली कस्टम विंडो की मदद से, पॉप-अप के दिखने के तरीके को पूरी तरह से कंट्रोल किया जा सकता है.

जानकारी वाली विंडो जोड़ना

यहां दिया गया स्निपेट, एक सामान्य मार्कर बनाता है. इसमें जानकारी वाली विंडो के टेक्स्ट के लिए सिर्फ़ एक टाइटल होता है.

Swift

let position = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127)
let london = GMSMarker(position: position)
london.title = "London"
london.map = mapView
      

Objective-C

CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127);
GMSMarker *london = [GMSMarker markerWithPosition:position];
london.title = @"London";
london.map = mapView;
      

snippet प्रॉपर्टी की मदद से, अतिरिक्त टेक्स्ट जोड़ा जा सकता है. यह टेक्स्ट, टाइटल के नीचे छोटे फ़ॉन्ट में दिखेगा. जानकारी वाली विंडो की चौड़ाई से ज़्यादा लंबे स्ट्रिंग, अपने-आप कई लाइनों में रैप हो जाते हैं. बहुत लंबे मैसेज काट दिए जा सकते हैं.

Swift

london.title = "London"
london.snippet = "Population: 8,174,100"
london.map = mapView
      

Objective-C

london.title = @"London";
london.snippet = @"Population: 8,174,100";
london.map = mapView;
      

जानकारी वाली विंडो दिखाना/छिपाना

जानकारी वाली विंडो, मार्कर पर उपयोगकर्ता के टच इवेंट के हिसाब से काम करती हैं. जानकारी वाली विंडो को प्रोग्राम के ज़रिए दिखाया या छिपाया जा सकता है. इसके लिए, selectedMarker प्रॉपर्टी को सेट करें: GMSMapView

  • मार्कर को दिखाने के लिए, selectedMarker को मार्कर के नाम पर सेट करें.
  • मार्कर को छिपाने के लिए, selectedMarker को nil पर सेट करें.

Swift

london.title = "London"
london.snippet = "Population: 8,174,100"
london.map = mapView
// Show marker
mapView.selectedMarker = london
// Hide marker
mapView.selectedMarker = nil
      

Objective-C

london.title = @"London";
london.snippet = @"Population: 8,174,100";
london.map = mapView;
// Show marker
mapView.selectedMarker = london;
// Hide marker
mapView.selectedMarker = nil;
      

जानकारी वाली विंडो को अपने-आप रीफ़्रेश होने के लिए सेट करना

अगर आपको जानकारी वाली विंडो की नई प्रॉपर्टी या कॉन्टेंट में बदलाव होने पर, उसे तुरंत दिखाना है, तो मार्कर पर tracksInfoWindowChanges को YES या true पर सेट करें. ऐसा करने से, जानकारी वाली विंडो के छिपने और फिर से दिखने का इंतज़ार नहीं करना पड़ेगा. डिफ़ॉल्ट रूप से, यह NO या false पर सेट होती है.

Swift

london.tracksInfoWindowChanges = true
      

Objective-C

london.tracksInfoWindowChanges = YES;
      

tracksInfoWindowChanges प्रॉपर्टी को कब सेट करना है, यह तय करने के लिए, आपको परफ़ॉर्मेंस से जुड़ी बातों को ध्यान में रखना चाहिए. साथ ही, यह भी देखना चाहिए कि जानकारी वाली विंडो को अपने-आप फिर से दिखाने की सुविधा से क्या फ़ायदे मिलते हैं. उदाहरण के लिए:

  • अगर आपको कई बदलाव करने हैं, तो प्रॉपर्टी को YES पर सेट करें. इसके बाद, इसे वापस NO पर सेट करें.
  • जब कोई ऐनिमेशन चल रहा हो या कॉन्टेंट एसिंक्रोनस तरीके से लोड हो रहा हो, तो आपको प्रॉपर्टी को YES पर सेट रखना चाहिए. ऐसा तब तक करें, जब तक कि कार्रवाइयां पूरी न हो जाएं.

मार्कर की iconView प्रॉपर्टी का इस्तेमाल करते समय ध्यान रखने वाली बातें भी देखें.

जानकारी वाली विंडो की पोज़िशन बदलना

जानकारी वाली विंडो, डिवाइस की स्क्रीन पर मार्कर के ऊपर बीच में दिखाई देती है. infoWindowAnchor प्रॉपर्टी सेट करके, मार्कर के मुकाबले जानकारी वाली विंडो की पोज़िशन बदली जा सकती है. यह प्रॉपर्टी, CGPoint को स्वीकार करती है. इसे (x,y) ऑफ़सेट के तौर पर तय किया जाता है. इसमें x और y, दोनों की वैल्यू 0.0 और 1.0 के बीच होती है. डिफ़ॉल्ट ऑफ़सेट (0.5, 0.0) होता है. इसका मतलब है कि यह मार्कर के ऊपर बीच में दिखती है. जानकारी वाली विंडो को कस्टम आइकॉन के साथ अलाइन करने के लिए, infoWindowAnchor ऑफ़सेट सेट करना काम का होता है.

Swift

london.infoWindowAnchor = CGPoint(x: 0.5, y: 0.5)
london.icon = UIImage(named: "house")
london.map = mapView
      

Objective-C

london.infoWindowAnchor = CGPointMake(0.5, 0.5);
london.icon = [UIImage imageNamed:@"house"];
london.map = mapView;
      

जानकारी वाली विंडो पर होने वाले इवेंट मैनेज करना

जानकारी वाली विंडो के इन इवेंट को सुना जा सकता है:

  • mapView:markerInfoWindow: — जब कोई मार्कर चुना जाने वाला होता है, तब इसे कॉल किया जाता है. मार्कर के लिए, जानकारी वाली कस्टम विंडो को UIView के तौर पर दिखाया जा सकता है. ज़्यादा जानकारी के लिए, नीचे जानकारी वाली कस्टम विंडो देखें.

  • mapView:markerInfoContents: — जब mapView:markerInfoWindow nil दिखाता है, तब इसे कॉल किया जाता है.

  • mapView:didCloseInfoWindowOfMarker: — जब मार्कर की जानकारी वाली विंडो बंद हो जाती है, तब इसे कॉल किया जाता है.

  • mapView:didLongPressInfoWindowOfMarker: — मार्कर की जानकारी वाली विंडो को दबाकर रखने के बाद, इसे कॉल किया जाता है.

इवेंट सुनने के लिए, आपको GMSMapViewDelegate प्रोटोकॉल लागू करना होगा. इवेंट के बारे में गाइड और GMSMapViewDelegate पर मौजूद तरीकों की सूची देखें.

GitHub पर ऐसे सैंपल मौजूद हैं जिनसे पता चलता है कि जानकारी वाली विंडो के इवेंट को कैसे मैनेज किया जाता है:

जानकारी वाली कस्टम विंडो

जानकारी वाली विंडो के कॉन्टेंट को पसंद के मुताबिक बनाने के लिए, UIView की सबक्लास बनाएं. इससे जानकारी वाली कस्टम विंडो का लेआउट तय किया जा सकेगा. उस सबक्लास में, व्यू को अपनी पसंद के मुताबिक तय करें. उदाहरण के लिए, टाइटल और स्निपेट टेक्स्ट दिखाने के लिए, कस्टम UILabel इंस्टेंस का इस्तेमाल किया जा सकता है. साथ ही, जानकारी वाली विंडो में इमेज जोड़ने के लिए, UIImageView इंस्टेंस जैसे अन्य व्यू का इस्तेमाल किया जा सकता है.

पक्का करें कि आपका ViewController लागू करे GMSIndoorDisplayDelegate प्रोटोकॉल और तय करे लिसनर के लिए mapView:markerInfoWindow: इवेंट. जब कोई मार्कर चुना जाने वाला होता है, तब इस इवेंट लिसनर को कॉल किया जाता है. इससे, मार्कर के लिए जानकारी वाली कस्टम विंडो तय करने के लिए, UIView क्लास का कस्टम इंस्टेंस दिखाया जा सकता है.

नीचे दी गई इमेज में, जानकारी वाली डिफ़ॉल्ट विंडो, कॉन्टेंट को पसंद के मुताबिक बनाने के बाद दिखने वाली जानकारी वाली विंडो, और फ़्रेम और बैकग्राउंड को पसंद के मुताबिक बनाने के बाद दिखने वाली जानकारी वाली विंडो दिखाई गई है.

जानकारी वाली विंडो की तुलना

GitHub उदाहरण के लिए, MarkerInfoWindowViewController.m (Objective-C) या MarkerInfoWindowViewController.swift (Swift) की परिभाषा देखें.

इन सैंपल को डाउनलोड करने और चलाने के बारे में जानकारी के लिए, कोड सैंपल देखें.