Cửa sổ thông tin cho phép bạn hiển thị thông tin cho người dùng khi họ nhấn vào một điểm đánh dấu.
Một cửa sổ thông tin được vẽ dựa trên màn hình của thiết bị, căn giữa phía trên điểm đánh dấu liên kết. Cửa sổ thông tin mặc định chứa tiêu đề in đậm, văn bản đoạn nội dung bên dưới tiêu đề.
Nội dung của cửa sổ thông tin được xác định bằng các thuộc tính title
và snippet
của điểm đánh dấu. Khi bạn nhấp vào điểm đánh dấu, một cửa sổ thông tin sẽ không hiển thị nếu cả thuộc tính title
và snippet
đều trống hoặc nil
.
Mỗi lần chỉ một cửa sổ thông tin được hiển thị. Nếu người dùng nhấn vào một điểm đánh dấu khác, cửa sổ hiện tại sẽ bị ẩn và cửa sổ thông tin mới sẽ mở ra. Nếu người dùng nhấp vào một điểm đánh dấu đang hiển thị cửa sổ thông tin, cửa sổ thông tin đó sẽ đóng và mở lại.
Tạo một cửa sổ thông tin tuỳ chỉnh để thêm văn bản hoặc hình ảnh bổ sung. Cửa sổ thông tin tuỳ chỉnh cho phép bạn kiểm soát hoàn toàn giao diện của cửa sổ bật lên.
Thêm cửa sổ thông tin
Đoạn mã sau đây sẽ tạo một điểm đánh dấu đơn giản, chỉ có tiêu đề cho văn bản của cửa sổ thông tin.
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;
Với thuộc tính snippet
, bạn có thể thêm văn bản bổ sung sẽ xuất hiện bên dưới tiêu đề ở phông chữ nhỏ hơn. Các chuỗi dài hơn chiều rộng của cửa sổ thông tin sẽ tự động được bọc qua một số dòng. Tin nhắn quá dài có thể bị cắt bớt.
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;
Hiển thị/ẩn một cửa sổ thông tin
Cửa sổ thông tin được thiết kế để phản hồi sự kiện chạm của người dùng trên điểm đánh dấu.
Bạn có thể hiển thị hoặc ẩn cửa sổ thông tin theo phương thức lập trình bằng cách đặt thuộc tính selectedMarker
của GMSMapView
:
- Đặt
selectedMarker
thành tên của điểm đánh dấu để hiển thị điểm đánh dấu. - Hãy đặt
selectedMarker
thànhnil
để ẩn tiện ích.
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;
Đặt cửa sổ thông tin để tự động làm mới
Đặt tracksInfoWindowChanges
trên điểm đánh dấu thành YES
hoặc true
nếu bạn muốn các thuộc tính mới hoặc nội dung của cửa sổ thông tin xuất hiện ngay khi thay đổi, thay vì phải đợi cửa sổ thông tin ẩn rồi hiển thị lại. Giá trị mặc định là NO
hoặc false
.
Swift
london.tracksInfoWindowChanges = true
Objective-C
london.tracksInfoWindowChanges = YES;
Để quyết định thời điểm đặt thuộc tính
tracksInfoWindowChanges
, bạn
nên cân nhắc đến hiệu suất dựa trên những lợi thế khi
tự động vẽ lại cửa sổ thông tin. Ví dụ:
- Nếu có một loạt thay đổi để thực hiện, bạn có thể thay đổi thuộc tính thành
YES
, sau đó quay lạiNO
. - Khi một ảnh động đang chạy hoặc nội dung được tải không đồng bộ, bạn nên đặt thuộc tính này thành
YES
cho đến khi hoàn tất các thao tác.
Ngoài ra, hãy tham khảo các ghi chú cần xem xét khi sử dụng thuộc tính iconView
của điểm đánh dấu.
Thay đổi vị trí của cửa sổ thông tin
Một cửa sổ thông tin được vẽ hướng lên màn hình của thiết bị, nằm ở trung tâm phía trên điểm đánh dấu liên kết. Bạn có thể thay đổi vị trí của cửa sổ thông tin
so với điểm đánh dấu bằng cách đặt thuộc tính infoWindowAnchor
. Thuộc tính này chấp nhận CGPoint
, được xác định là độ lệch (x, y), trong đó cả x và y đều nằm trong khoảng từ 0 đến 1,0. Độ lệch mặc định là (0.5, 0.0), nghĩa là phần trên cùng ở giữa. Việc đặt độ lệch infoWindowAnchor
rất hữu ích khi căn chỉnh cửa sổ thông tin với biểu tượng tuỳ chỉnh.
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;
Xử lý sự kiện trên cửa sổ thông tin
Bạn có thể nghe các sự kiện cửa sổ thông tin sau:
mapView:markerInfoWindow:
– Được gọi khi một điểm đánh dấu sắp được chọn. Có thể tuỳ ý trả về một cửa sổ thông tin tuỳ chỉnh, dưới dạngUIView
để sử dụng cho điểm đánh dấu. Xem Cửa sổ thông tin tuỳ chỉnh bên dưới để biết thêm thông tin.mapView:markerInfoContents:
– Được gọi khimapView:markerInfoWindow
trả về giá trị null.mapView:didCloseInfoWindowOfMarker:
– Được gọi khi cửa sổ thông tin của điểm đánh dấu đóng.mapView:didLongPressInfoWindowOfMarker:
– Được gọi sau khi nhấn và giữ cửa sổ thông tin của một điểm đánh dấu.
Để theo dõi các sự kiện, bạn phải triển khai giao thức GMSMapViewDelegate
. Xem
hướng dẫn về các sự kiện và danh sách các phương thức trên
GMSMapViewDelegate
.
GitHub bao gồm các mẫu minh họa cách xử lý các sự kiện trong cửa sổ thông tin:
- Mục tiêu-C
- Swift (Swift)
Cửa sổ thông tin tuỳ chỉnh
Tuỳ chỉnh nội dung của cửa sổ thông tin bằng cách tạo một lớp con của UIView
xác định bố cục của cửa sổ thông tin tuỳ chỉnh. Trong lớp con đó,
hãy xác định chế độ xem theo ý muốn. Ví dụ: bạn có thể sử dụng bản sao UILabel
tuỳ chỉnh để hiển thị văn bản tiêu đề và đoạn trích cùng với các chế độ xem khác, chẳng hạn như bản sao UIImageView
, để thêm hình ảnh hiển thị trong cửa sổ thông tin.
Hãy đảm bảo ViewController
triển khai giao thức
GMSIndoorDisplayDelegate
và xác định trình nghe cho sự kiện
mapView:markInfoWindow:. Trình nghe sự kiện này được gọi khi một điểm đánh dấu sắp được chọn và cho phép bạn trả về một phiên bản của lớp UIView
tuỳ chỉnh để xác định cửa sổ thông tin tuỳ chỉnh mà điểm đánh dấu sử dụng.
Các hình ảnh dưới đây hiển thị một cửa sổ thông tin mặc định, một cửa sổ thông tin có nội dung tuỳ chỉnh và một cửa sổ thông tin có khung và nền tuỳ chỉnh.

Mã mẫu trên GitHub được cung cấp cùng với SDK Maps dành cho iOS bao gồm các mẫu cửa sổ thông tin tùy chỉnh. Ví dụ: hãy xem định nghĩa của MarkerInfoWindowViewController.m (Objective-C) hoặc MarkerInfoWindowViewController.swift (Swift).
Vui lòng xem mã mẫu để biết thông tin về cách tải xuống và chạy các mẫu này.