Các điểm đánh dấu cho biết các vị trí riêng lẻ trên bản đồ.
Theo mặc định, các điểm đánh dấu sử dụng một biểu tượng chuẩn có giao diện Google Maps phổ biến và cảm thấy. Nếu muốn tuỳ chỉnh điểm đánh dấu, bạn có thể thay đổi màu của điểm đánh dấu mặc định, hoặc thay thế hình ảnh điểm đánh dấu bằng biểu tượng tuỳ chỉnh hoặc thay đổi các thuộc tính của điểm đánh dấu.
Để phản hồi sự kiện nhấp chuột trên một điểm đánh dấu, bạn có thể mở một thông tin cửa sổ. Một cửa sổ thông tin sẽ hiển thị văn bản hoặc hình ảnh trong một cửa sổ hộp thoại ở phía trên điểm đánh dấu. Bạn có thể sử dụng cửa sổ thông tin mặc định để hiển thị văn bản hoặc tạo cửa sổ thông tin tuỳ chỉnh của riêng bạn để kiểm soát hoàn toàn nội dung của quảng cáo.
Thêm điểm đánh dấu
Để thêm điểm đánh dấu, hãy tạo đối tượng GMSMarker
bao gồm position
và
title
rồi đặt map
.
Ví dụ sau minh hoạ cách thêm một điểm đánh dấu vào một
Đối tượng GMSMapView
. Điểm đánh dấu được tạo tại toạ độ 10,10
và hiển thị
chuỗi "Hello world" trong cửa sổ thông tin khi nhấp vào.
Swift
let position = CLLocationCoordinate2D(latitude: 10, longitude: 10) let marker = GMSMarker(position: position) marker.title = "Hello World" marker.map = mapView
Objective-C
CLLocationCoordinate2D position = CLLocationCoordinate2DMake(10, 10); GMSMarker *marker = [GMSMarker markerWithPosition:position]; marker.title = @"Hello World"; marker.map = mapView;
Bạn có thể tạo ảnh động cho việc thêm các điểm đánh dấu mới vào bản đồ bằng cách đặt
marker.appearAnimation
thuộc tính sang:
kGMSMarkerAnimationPop
để làm cho điểm đánh dấu bật ra từgroundAnchor
của nó khi được thêm.kGMSMarkerAnimationFadeIn
để làm cho điểm đánh dấu mờ dần khi được thêm.
Xóa điểm đánh dấu
Bạn có thể xoá một điểm đánh dấu khỏi bản đồ bằng cách đặt thuộc tính map
của GMSMarker
thành nil
. Ngoài ra, bạn có thể xoá tất cả lớp phủ (bao gồm cả điểm đánh dấu) hiện có trên bản đồ bằng cách gọi phương thức GMSMapView
clear
.
Swift
let camera = GMSCameraPosition.camera( withLatitude: -33.8683, longitude: 151.2086, zoom: 6 ) let mapView = GMSMapView.map(withFrame: .zero, camera: camera) // ... mapView.clear()
Objective-C
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:6]; mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; // ... [mapView clear];
Nếu bạn muốn chỉnh sửa một điểm đánh dấu sau khi đã thêm điểm đánh dấu đó vào bản đồ,
hãy đảm bảo bạn luôn giữ đối tượng GMSMarker
. Bạn có thể sửa đổi điểm đánh dấu sau bằng cách thay đổi đối tượng này.
Swift
let position = CLLocationCoordinate2D(latitude: 10, longitude: 10) let marker = GMSMarker(position: position) marker.map = mapView // ... marker.map = nil
Objective-C
CLLocationCoordinate2D position = CLLocationCoordinate2DMake(10, 10); GMSMarker *marker = [GMSMarker markerWithPosition:position]; marker.map = mapView; // ... marker.map = nil;
Thay đổi màu đánh dấu
Bạn có thể tuỳ chỉnh màu của hình ảnh điểm đánh dấu mặc định bằng cách yêu cầu phủ màu
phiên bản của biểu tượng mặc định bằng markerImageWithColor:
và truyền
hình ảnh kết quả cho thuộc tính biểu tượng của GMSMarker
.
Swift
marker.icon = GMSMarker.markerImage(with: .black)
Objective-C
marker.icon = [GMSMarker markerImageWithColor:[UIColor blackColor]];
Tuỳ chỉnh hình ảnh điểm đánh dấu
Nếu bạn muốn thay đổi hình ảnh điểm đánh dấu mặc định, bạn có thể đặt biểu tượng tuỳ chỉnh, sử dụng
thuộc tính icon
hoặc iconView
của điểm đánh dấu. Nếu bạn đặt iconView
, API
sẽ bỏ qua thuộc tính icon
.
Sử dụng thuộc tính icon
của điểm đánh dấu
Đoạn mã sau đây tạo ra một điểm đánh dấu với biểu tượng tuỳ chỉnh được cung cấp dưới dạng
UIImage
trong thuộc tính icon
. Biểu tượng này nằm ở chính giữa London, Anh. Chiến lược phát hành đĩa đơn
giả định rằng ứng dụng của bạn chứa một hình ảnh có tên là "house.png".
Swift
let positionLondon = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127) let london = GMSMarker(position: positionLondon) london.title = "London" london.icon = UIImage(named: "house") london.map = mapView
Objective-C
CLLocationCoordinate2D positionLondon = CLLocationCoordinate2DMake(51.5, -0.127); GMSMarker *london = [GMSMarker markerWithPosition:positionLondon]; london.title = @"London"; london.icon = [UIImage imageNamed:@"house"]; london.map = mapView;
Nếu bạn đang tạo nhiều điểm đánh dấu bằng cùng một hình ảnh, hãy sử dụng cùng một phiên bản
UIImage
cho mỗi điểm đánh dấu. Điều này giúp cải thiện hiệu suất của
khi hiển thị nhiều điểm đánh dấu.
Hình ảnh này có thể có nhiều khung hình. Ngoài ra, alignmentRectInsets
thuộc tính được tôn trọng. Điều này sẽ hữu ích nếu điểm đánh dấu có bóng hoặc
vùng không sử dụng được.
Sử dụng thuộc tính iconView
của điểm đánh dấu
Đoạn mã sau đây tạo một điểm đánh dấu có biểu tượng tuỳ chỉnh bằng cách đặt giá trị
thuộc tính iconView
của điểm đánh dấu và tạo ảnh động cho sự thay đổi về màu sắc của điểm đánh dấu.
Đoạn mã giả định rằng ứng dụng của bạn có chứa một hình ảnh có tên là "house.png".
Swift
import CoreLocation import GoogleMaps class MarkerViewController: UIViewController, GMSMapViewDelegate { var mapView: GMSMapView! var london: GMSMarker? var londonView: UIImageView? override func viewDidLoad() { super.viewDidLoad() let camera = GMSCameraPosition.camera( withLatitude: 51.5, longitude: -0.127, zoom: 14 ) let mapView = GMSMapView.map(withFrame: .zero, camera: camera) view = mapView mapView.delegate = self let house = UIImage(named: "House")!.withRenderingMode(.alwaysTemplate) let markerView = UIImageView(image: house) markerView.tintColor = .red londonView = markerView let position = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127) let marker = GMSMarker(position: position) marker.title = "London" marker.iconView = markerView marker.tracksViewChanges = true marker.map = mapView london = marker } func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) { UIView.animate(withDuration: 5.0, animations: { () -> Void in self.londonView?.tintColor = .blue }, completion: {(finished) in // Stop tracking view changes to allow CPU to idle. self.london?.tracksViewChanges = false }) } }
Objective-C
@import CoreLocation; @import GoogleMaps; @interface MarkerViewController : UIViewController <GMSMapViewDelegate> @property (strong, nonatomic) GMSMapView *mapView; @end @implementation MarkerViewController { GMSMarker *_london; UIImageView *_londonView; } - (void)viewDidLoad { [super viewDidLoad]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:51.5 longitude:-0.127 zoom:14]; _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; self.view = _mapView; _mapView.delegate = self; UIImage *house = [UIImage imageNamed:@"House"]; house = [house imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; _londonView = [[UIImageView alloc] initWithImage:house]; _londonView.tintColor = [UIColor redColor]; CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127); _london = [GMSMarker markerWithPosition:position]; _london.title = @"London"; _london.iconView = _londonView; _london.tracksViewChanges = YES; _london.map = self.mapView; } - (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)position { [UIView animateWithDuration:5.0 animations:^{ self->_londonView.tintColor = [UIColor blueColor]; } completion:^(BOOL finished) { // Stop tracking view changes to allow CPU to idle. self->_london.tracksViewChanges = NO; }]; } @end
Vì iconView
chấp nhận UIView
nên bạn có thể có một hệ phân cấp giao diện người dùng chuẩn
các điều khiển xác định điểm đánh dấu của bạn, mỗi thành phần hiển thị có bộ ảnh động chuẩn
các chức năng khác nhau. Bạn có thể bao gồm các thay đổi cho kích thước, màu sắc và độ đậm nhạt của điểm đánh dấu
cũng như áp dụng các phép biến đổi tuỳ ý. Thuộc tính iconView
hỗ trợ ảnh động của tất cả thuộc tính có thể tạo ảnh của UIView
, ngoại trừ frame
và
center
.
Vui lòng lưu ý những điểm cần cân nhắc sau đây khi sử dụng iconView
:
UIView
có thể đòi hỏi nhiều tài nguyên khi bạn đặttracksViewChanges
xuốngYES
. Điều này có thể làm tăng mức sử dụng pin. So với, mộtUIImage
khung đơn ở dạng tĩnh và không cần kết xuất lại.- Một số thiết bị có thể gặp khó khăn trong việc kết xuất bản đồ nếu bạn có nhiều điểm đánh dấu trên
và mỗi điểm đánh dấu có
UIView
riêng và tất cả các điểm đánh dấu đều đang theo dõi thay đổi cùng một lúc. iconView
không phản hồi hành động tương tác của người dùng, vì đó là ảnh chụp nhanh chế độ xem.- Khung hiển thị sẽ hoạt động như thể
clipsToBounds
được đặt thànhYES
, bất kể giá trị thực tế. Bạn có thể áp dụng các phép biến đổi hoạt động bên ngoài giới hạn, nhưng đối tượng mà bạn vẽ phải nằm trong giới hạn của đối tượng. Tất cả chuyển đổi/chuyển đổi được giám sát và áp dụng. Tóm lại: lượt xem phụ phải có trong khung hiển thị.
Để quyết định thời điểm đặt thuộc tính tracksViewChanges
, bạn nên cân nhắc
các cân nhắc về hiệu suất so với lợi thế của việc vẽ lại điểm đánh dấu
tự động. Ví dụ:
- Nếu cần thực hiện một loạt các thay đổi, bạn có thể thay đổi thuộc tính thành
YES
rồi quay lạiNO
. - Khi ảnh động đang chạy hoặc nội dung đang được tải
không đồng bộ, bạn nên giữ thuộc tính này thành
YES
cho đến khi các hành động đều đã hoàn tất.
Thay đổi độ mờ của điểm đánh dấu
Bạn có thể kiểm soát độ mờ của điểm đánh dấu bằng thuộc tính opacity
. Bạn nên
chỉ định độ mờ dưới dạng số thực từ 0,0 đến 1,0, trong đó 0 là hoàn toàn trong suốt
và 1 là hoàn toàn không rõ ràng.
Swift
marker.opacity = 0.6
Objective-C
marker.opacity = 0.6;
Bạn có thể tạo ảnh động cho độ mờ của điểm đánh dấu bằng [Core Animation]Core
Ảnh động sử dụng GMSMarkerLayer
.
Làm phẳng điểm đánh dấu
Biểu tượng điểm đánh dấu thường được vẽ hướng dựa vào màn hình của thiết bị thay vì bề mặt bản đồ, do đó việc xoay, nghiêng hoặc thu phóng bản đồ không nhất thiết thay đổi hướng của điểm đánh dấu.
Bạn có thể đặt hướng của điểm đánh dấu là phẳng so với trái đất. Điểm đánh dấu phẳng sẽ xoay khi bản đồ xoay và thay đổi phối cảnh khi bản đồ nghiêng. Giống như điểm đánh dấu thông thường, các điểm đánh dấu phẳng giữ nguyên kích thước của chúng khi bản đồ được phóng to hoặc thu nhỏ.
Để thay đổi hướng của điểm đánh dấu, hãy đặt thuộc tính flat
của điểm đánh dấu thành
YES
hoặc true
.
Swift
let positionLondon = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127) let londonMarker = GMSMarker(position: positionLondon) londonMarker.isFlat = true londonMarker.map = mapView
Objective-C
CLLocationCoordinate2D positionLondon = CLLocationCoordinate2DMake(51.5, -0.127); GMSMarker *londonMarker = [GMSMarker markerWithPosition:positionLondon]; londonMarker.flat = YES; londonMarker.map = mapView;
Xoay điểm đánh dấu
Bạn có thể xoay điểm đánh dấu xung quanh điểm neo của điểm neo đó bằng cách đặt rotation
thuộc tính này. Chỉ định chế độ xoay dưới dạng một loại CLLocationDegrees
, được đo bằng
theo chiều kim đồng hồ so với vị trí mặc định. Khi điểm đánh dấu bằng phẳng trên bản đồ,
vị trí mặc định là Bắc.
Ví dụ sau đây xoay điểm đánh dấu 90°. Thiết lập groundAnchor
thành 0.5,0.5
sẽ làm cho điểm đánh dấu bị xoay quanh tâm của nó
của cơ sở của nó.
Swift
let degrees = 90.0 londonMarker.groundAnchor = CGPoint(x: 0.5, y: 0.5) londonMarker.rotation = degrees londonMarker.map = mapView
Objective-C
CLLocationDegrees degrees = 90; londonMarker.groundAnchor = CGPointMake(0.5, 0.5); londonMarker.rotation = degrees; londonMarker.map = mapView;
Xử lý sự kiện trên điểm đánh dấu
Bạn có thể nghe các sự kiện xảy ra trên bản đồ, chẳng hạn như khi người dùng nhấn vào một
điểm đánh dấu. Để nghe sự kiện, bạn phải triển khai
Giao thức GMSMapViewDelegate
. Xem sự kiện điểm đánh dấu và
cử chỉ để tìm hiểu cách xử lý
các sự kiện đánh dấu cụ thể. Hướng dẫn tham gia sự kiện cũng cung cấp danh sách
trên GMSMapViewDelegate. Đối với các sự kiện trong Chế độ xem đường phố, hãy xem
GMSPanoramaViewDelegate
.