
หน้าต่างข้อมูลช่วยให้คุณแสดงข้อมูลแก่ผู้ใช้เมื่อผู้ใช้แตะเครื่องหมาย
หน้าต่างข้อมูลจะวาดโดยหันไปทางหน้าจอของอุปกรณ์ โดยอยู่กึ่งกลางเหนือเครื่องหมายที่เชื่อมโยง หน้าต่างข้อมูลเริ่มต้นจะมีชื่อเป็นตัวหนา และมีข้อความตัวอย่างอยู่ใต้ชื่อ
เนื้อหาของหน้าต่างข้อมูลจะกำหนดโดยพร็อพเพอร์ตี้ title และ snippet ของเครื่องหมาย การคลิกเครื่องหมายจะไม่แสดงหน้าต่างข้อมูลหากทั้งพร็อพเพอร์ตี้ title และ snippet ว่างเปล่าหรือเป็น nil
ระบบจะแสดงหน้าต่างข้อมูลครั้งละ 1 หน้าต่างเท่านั้น หากผู้ใช้แตะเครื่องหมายอื่น หน้าต่างปัจจุบันจะถูกซ่อนและหน้าต่างข้อมูลใหม่จะเปิดขึ้น หากผู้ใช้คลิกเครื่องหมายที่แสดงหน้าต่างข้อมูลอยู่ หน้าต่างข้อมูลนั้นจะปิดและเปิดใหม่
สร้างหน้าต่างข้อมูลที่กำหนดเองเพื่อเพิ่มข้อความหรือรูปภาพเพิ่มเติม หน้าต่างข้อมูลที่กำหนดเองช่วยให้คุณควบคุมลักษณะที่ปรากฏของป๊อปอัปได้อย่างสมบูรณ์
เพิ่มหน้าต่างข้อมูล
ข้อมูลโค้ดต่อไปนี้จะสร้างเครื่องหมายแบบง่าย โดยมีเพียงชื่อสำหรับข้อความของหน้าต่างข้อมูล
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แสดงผลเป็น nilmapView:didCloseInfoWindowOfMarker:- เรียกใช้เมื่อหน้าต่างข้อมูลของเครื่องหมายปิดลงmapView:didLongPressInfoWindowOfMarker:- เรียกใช้หลังจากกดหน้าต่างข้อมูลของเครื่องหมายค้างไว้
หากต้องการฟังเหตุการณ์ คุณต้องใช้โปรโตคอล GMSMapViewDelegate ดูคู่มือเกี่ยวกับเหตุการณ์และรายการเมธอดใน GMSMapViewDelegate
GitHub มีตัวอย่างที่สาธิตวิธีจัดการเหตุการณ์ในหน้าต่างข้อมูล ดังนี้
หน้าต่างข้อมูลที่กำหนดเอง
ปรับแต่งเนื้อหาของหน้าต่างข้อมูลโดยสร้างคลาสย่อยของ UIView ที่กำหนดเลย์เอาต์ของหน้าต่างข้อมูลที่กำหนดเอง ในคลาสย่อยนั้น ให้กำหนดมุมมองตามที่คุณต้องการ เช่น คุณสามารถใช้อินสแตนซ์ UILabel ที่กำหนดเองเพื่อแสดงชื่อและข้อความตัวอย่าง และมุมมองอื่นๆ เช่น อินสแตนซ์ UIImageView เพื่อเพิ่มรูปภาพที่แสดงในหน้าต่างข้อมูล
ตรวจสอบว่า ViewController ของคุณใช้โปรโตคอล GMSIndoorDisplayDelegate และกำหนด Listener สำหรับเหตุการณ์ mapView:markerInfoWindow: ระบบจะเรียกใช้ Listener เหตุการณ์นี้เมื่อกำลังจะเลือกเครื่องหมาย และช่วยให้คุณแสดงผลอินสแตนซ์ของคลาส UIView ที่กำหนดเองเพื่อกำหนดหน้าต่างข้อมูลที่กำหนดเองซึ่งเครื่องหมายใช้
รูปภาพด้านล่างแสดงหน้าต่างข้อมูลเริ่มต้น หน้าต่างข้อมูลที่มีเนื้อหาที่กำหนดเอง และหน้าต่างข้อมูลที่มีเฟรมและพื้นหลังที่กำหนดเอง
ตัวอย่างโค้ดใน GitHub ที่มาพร้อมกับ Maps SDK สำหรับ iOS มีตัวอย่างของหน้าต่างข้อมูลที่กำหนดเอง ตัวอย่างเช่น ดูคำจำกัดความของ MarkerInfoWindowViewController.m (Objective-C) หรือ MarkerInfoWindowViewController.swift (Swift)
ดูข้อมูลเกี่ยวกับการดาวน์โหลดและเรียกใช้ตัวอย่างเหล่านี้ได้ที่ตัวอย่างโค้ด