Với Maps SDK cho iOS, bạn có thể thay đổi điểm nhìn của người dùng trên bản đồ bằng cách thay đổi camera của bản đồ.
Với Maps SDK cho iOS, người dùng có thể nghiêng và xoay bản đồ để điều chỉnh bản đồ theo hướng phù hợp với bối cảnh của họ. Ở bất kỳ mức thu phóng nào, người dùng đều có thể kéo bản đồ hoặc thay đổi góc nhìn của bản đồ với độ trễ rất thấp.
Các thay đổi đối với camera không làm thay đổi điểm đánh dấu, đường nhiều đoạn hoặc các đồ hoạ khác mà bạn đã thêm, mặc dù bạn có thể muốn thay đổi những nội dung bổ sung này để phù hợp hơn với chế độ xem mới.
Chế độ xem của bản đồ
Maps SDK cho iOS sử dụng phép chiếu Mercator để biểu thị bề mặt của thế giới (một hình cầu) trên màn hình của thiết bị (một mặt phẳng).
Vị trí camera
Chế độ xem bản đồ được mô phỏng như một camera nhìn xuống mặt phẳng. Vị trí của camera (và do đó, việc hiển thị bản đồ) được chỉ định bằng các thuộc tính sau: target (vị trí vĩ độ/kinh độ), bearing, tilt và zoom.

Mục tiêu (vị trí)
Mục tiêu của camera là vị trí ở tâm bản đồ, được chỉ định dưới dạng toạ độ vĩ độ và kinh độ.
Vĩ độ có thể nằm trong khoảng từ -85 đến 85 độ. Các giá trị cao hơn hoặc thấp hơn phạm vi này sẽ được xếp vào giá trị gần nhất trong phạm vi này. Ví dụ: nếu bạn chỉ định vĩ độ là 100, thì giá trị sẽ được đặt thành 85. Kinh độ nằm trong khoảng từ -180 đến 180 độ. Các giá trị nằm ngoài phạm vi này sẽ được bao bọc để nằm trong phạm vi (-180, 180). Ví dụ: 480, 840 và 1200 đều sẽ được chuyển thành 120 độ.Góc phương vị (hướng)
Hướng camera chỉ định hướng la bàn, được đo bằng độ so với hướng bắc thực, tương ứng với cạnh trên của bản đồ. Nếu bạn vẽ một đường thẳng đứng từ tâm bản đồ đến mép trên cùng của bản đồ, thì phương vị sẽ tương ứng với hướng của camera (được đo bằng độ) so với hướng bắc thực.
Góc phương vị 0 có nghĩa là phần trên cùng của bản đồ chỉ hướng bắc thực. Giá trị phương vị 90 có nghĩa là đỉnh của bản đồ chỉ về hướng đông (90 độ trên la bàn). Giá trị 180 có nghĩa là đỉnh của các điểm trên bản đồ hướng về phía nam.
Maps API cho phép bạn thay đổi hướng của bản đồ. Ví dụ: người lái xe thường xoay bản đồ đường bộ để căn chỉnh bản đồ theo hướng di chuyển của họ, trong khi người đi bộ đường dài sử dụng bản đồ và la bàn thường định hướng bản đồ sao cho một đường thẳng đứng chỉ về hướng bắc.
Độ nghiêng (góc nhìn)
Độ nghiêng xác định vị trí của camera trên một vòng cung ngay trên vị trí trung tâm của bản đồ, được đo bằng độ từ điểm thiên để (hướng chỉ thẳng xuống dưới camera). Giá trị 0 tương ứng với một camera hướng thẳng xuống. Giá trị lớn hơn 0 tương ứng với một camera được nghiêng về phía đường chân trời theo số độ đã chỉ định. Khi bạn thay đổi góc nhìn, bản đồ sẽ xuất hiện ở chế độ phối cảnh, với các đối tượng ở xa xuất hiện nhỏ hơn và các đối tượng ở gần xuất hiện lớn hơn. Các hình minh hoạ sau đây sẽ minh hoạ điều này.
Trong các hình ảnh bên dưới, góc nhìn là 0 độ. Hình ảnh đầu tiên cho thấy sơ đồ của việc này; vị trí 1 là vị trí của camera và vị trí 2 là vị trí hiện tại trên bản đồ. Bản đồ kết quả xuất hiện bên dưới.
![]() |
![]() |
Trong các hình ảnh bên dưới, góc nhìn là 45 độ. Lưu ý rằng camera di chuyển nửa chừng dọc theo một vòng cung giữa vị trí thẳng đứng (0 độ) và mặt đất (90 độ), đến vị trí 3. Camera vẫn hướng vào điểm trung tâm của bản đồ, nhưng giờ đây, bạn có thể thấy khu vực do đường thẳng ở vị trí 4 biểu thị.
![]() |
![]() |
Bản đồ trong ảnh chụp màn hình này vẫn được căn giữa tại cùng một điểm như trong bản đồ ban đầu, nhưng có nhiều đối tượng hơn xuất hiện ở đầu bản đồ. Khi bạn tăng góc lên quá 45 độ, các đối tượng giữa camera và vị trí trên bản đồ sẽ xuất hiện lớn hơn theo tỷ lệ, trong khi các đối tượng ngoài vị trí trên bản đồ sẽ xuất hiện nhỏ hơn theo tỷ lệ, tạo ra hiệu ứng ba chiều.
Zoom (thu phóng)
Mức thu phóng của camera sẽ xác định tỷ lệ của bản đồ. Ở mức thu phóng lớn hơn, bạn có thể thấy nhiều chi tiết hơn trên màn hình, trong khi ở mức thu phóng nhỏ hơn, bạn có thể thấy nhiều phần hơn trên thế giới trên màn hình. Ở mức thu phóng 0, tỷ lệ của bản đồ là toàn bộ thế giới có chiều rộng khoảng 256 điểm.
Việc tăng mức thu phóng thêm 1 sẽ tăng gấp đôi chiều rộng của thế giới trên màn hình. Do đó, ở mức thu phóng N, chiều rộng của thế giới xấp xỉ 256 * 2N điểm. Ví dụ: ở mức thu phóng 2, toàn bộ thế giới có chiều rộng khoảng 1024 điểm.
Cấp độ thu phóng không cần phải là số nguyên. Phạm vi mức thu phóng mà bản đồ cho phép phụ thuộc vào một số yếu tố, bao gồm cả mục tiêu, loại bản đồ và kích thước màn hình. Mọi số nằm ngoài phạm vi sẽ được chuyển đổi thành giá trị hợp lệ gần nhất tiếp theo, có thể là mức thu phóng tối thiểu hoặc mức thu phóng tối đa. Danh sách sau đây cho biết mức độ chi tiết gần đúng mà bạn có thể thấy ở từng mức thu phóng:
- 1: Thế giới
- 5: Khối đất/lục địa
- 10: Thành phố
- 15: Đường phố
- 20: Toà nhà
![]() |
![]() |
![]() |
Đặt vị trí ban đầu của camera
Đặt vị trí ban đầu của camera bằng đối tượng GMSCameraPosition
. Đối tượng này cho phép bạn đặt vĩ độ và kinh độ của mục tiêu cùng với hướng, độ nghiêng và mức thu phóng.
Để đặt vị trí ban đầu của camera, hãy tạo một đối tượng GMSMapViewOptions
và đặt thuộc tính camera
thành GMSCameraPosition
. Sau đó, hãy truyền các lựa chọn của bạn vào hàm khởi tạo tiện lợi GMSMapView
.
Swift
let options = GMSMapViewOptions() options.camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 16) let mapView = GMSMapView(options:options)
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:16]; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
Bạn cũng có thể tạo đối tượng GMSMapView
bằng phương thức init UIView
mặc định. Trong trường hợp này, vị trí camera bắt đầu ở vị trí mặc định và bạn thay đổi vị trí đó sau khi tạo.
Swift
let options = GMSMapViewOptions() options.frame = self.view.bounds let mapView = GMSMapView(options:options)
Objective-C
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.frame = self.view.bounds; GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
Thay đổi vị trí của camera
Bạn có thể thay đổi vị trí camera theo phương thức lập trình để đặt vị trí, hướng, độ nghiêng và mức thu phóng. Mặc dù GMSMapView
cung cấp một số phương thức mà bạn có thể dùng để thay đổi vị trí camera, nhưng bạn thường dùng GMSCameraPosition
hoặc GMSCameraUpdate
:
GMSCameraPosition
chứa các thuộc tính và phương thức mà bạn dùng để thay đổi mọi thông số vị trí camera: mục tiêu, hướng, độ nghiêng và mức thu phóng.GMSCameraUpdate
cho phép bạn thay đổi mục tiêu, hướng, độ nghiêng và mức thu phóng, đồng thời chứa các phương thức tiện lợi bổ sung để hỗ trợ thao tác cuộn, thu phóng nâng cao, căn giữa camera trong các ranh giới xác định trước, v.v.
Khi di chuyển camera, bạn có thể chọn "chụp" camera ở vị trí mới (tức là không có ảnh động) hoặc tạo ảnh động cho thao tác di chuyển. Ví dụ: nếu bạn tạo hiệu ứng cho một thay đổi đối với vị trí mục tiêu của camera, thì hiệu ứng sẽ lia máy từ vị trí trước đó sang vị trí mới.
Hoạt ảnh này nội suy giữa các thuộc tính camera hiện tại và các thuộc tính camera mới. Bạn có thể kiểm soát thời lượng của ảnh động bằng Core Animation.
Sử dụng GMSCameraPosition
Để thay đổi camera bằng GMSCameraPosition
, bạn tạo một đối tượng mới hoặc sao chép một đối tượng hiện có rồi đặt đối tượng đó trên đối tượng GMSMapView
. Sử dụng đối tượng GMSCameraPosition
để di chuyển nhanh camera đến vị trí mới có hoặc không có ảnh động.
Sử dụng đối tượng GMSCameraPosition
để định cấu hình mọi thuộc tính của camera, chẳng hạn như vĩ độ, kinh độ, mức thu phóng, hướng và góc nhìn. Sau đó, bạn dùng đối tượng đó để đặt thuộc tính camera
của GMSMapView
.
Swift
let fancy = GMSCameraPosition( latitude: -33, longitude: 151, zoom: 6, bearing: 270, viewingAngle: 45 ) mapView.camera = fancy
Objective-C
GMSCameraPosition *fancy = [GMSCameraPosition cameraWithLatitude:-33.8683 longitude:151.2086 zoom:6 bearing:30 viewingAngle:45]; [mapView setCamera:fancy];
Bỏ qua mọi thuộc tính GMSCameraPosition
mà bạn muốn đặt thành giá trị mặc định.
Để tạo hiệu ứng chuyển động, hãy dùng phương thức animateToCameraPosition:
thay vì đặt thuộc tính camera
.
Sử dụng GMSCameraUpdate
GMSCameraUpdate
cho phép bạn cập nhật vị trí của camera và chọn có chuyển nhanh đến vị trí mới đó hay không. Ưu điểm của GMSCameraUpdate
là sự tiện lợi. Bạn có thể dùng GMSCameraPosition
để thực hiện các tác vụ tương tự như GMSCameraUpdate
, nhưng GMSCameraUpdate
cung cấp các phương thức trợ giúp bổ sung để giúp bạn thao tác với camera dễ dàng hơn.
Ví dụ: để sử dụng GMSCameraPosition
nhằm tăng mức thu phóng hiện tại, trước tiên, bạn phải xác định mức thu phóng hiện tại, sau đó tạo một đối tượng GMSCameraPosition
trong đó bạn đặt mức thu phóng thành một giá trị lớn hơn mức thu phóng hiện tại.
Ngoài ra, hãy tạo một đối tượng GMSCameraUpdate
bằng phương thức zoomIn:
.
Sau đó, hãy cập nhật camera bằng cách truyền đối tượng GMSCameraUpdate
đến phương thức GMSMapView
animateWithCameraUpdate:
.
Swift
// Zoom in one zoom level let zoomCamera = GMSCameraUpdate.zoomIn() mapView.animate(with: zoomCamera)
Objective-C
// Zoom in one zoom level GMSCameraUpdate *zoomCamera = [GMSCameraUpdate zoomIn]; [mapView animateWithCameraUpdate:zoomCamera];
Thay vào đó, hãy dùng phương thức GMSMapView
moveCamera:
để di chuyển nhanh camera đến vị trí mới.
Trong ví dụ tiếp theo, bạn sẽ dùng GMSCameraUpdate
để tạo ảnh động cho một thao tác di chuyển camera nhằm đặt camera vào giữa Vancouver.
Swift
// Center the camera on Vancouver, Canada let vancouver = CLLocationCoordinate2D(latitude: 49.26, longitude: -123.11) let vancouverCam = GMSCameraUpdate.setTarget(vancouver) mapView.animate(with: vancouverCam)
Objective-C
// Center the camera on Vancouver, Canada CLLocationCoordinate2D vancouver = CLLocationCoordinate2DMake(49.26, -123.11); GMSCameraUpdate *vancouverCam = [GMSCameraUpdate setTarget:vancouver]; [mapView animateWithCameraUpdate:vancouverCam];
Tạo một đối tượng GMSCameraUpdate
Tạo một đối tượng GMSCameraUpdate
bằng cách sử dụng một trong các phương thức của đối tượng đó.
zoomIn:
vàzoomOut:
- Thay đổi mức thu phóng hiện tại thêm 1.0, trong khi giữ nguyên tất cả các thuộc tính khác.
zoomTo:
- Thay đổi mức thu phóng thành giá trị đã cho, đồng thời giữ nguyên tất cả các thuộc tính khác.
zoomBy:
- Tăng (hoặc giảm, nếu giá trị là số âm) mức thu phóng theo giá trị đã cho.
zoomBy:atPoint:
- Tăng (hoặc giảm, nếu giá trị là âm) mức thu phóng theo giá trị đã cho, đồng thời giữ lại vị trí của điểm được chỉ định trên màn hình.
setTarget:
- Thay đổi vĩ độ và kinh độ của camera, đồng thời giữ nguyên tất cả các thuộc tính khác.
setTarget:zoom:
- Thay đổi vĩ độ, kinh độ và mức thu phóng của camera trong khi vẫn giữ nguyên tất cả các thuộc tính khác.
setCamera:
- Đặt một
GMSCameraPosition
mới. scrollByX:Y:
- Thay đổi vĩ độ và kinh độ của camera để di chuyển bản đồ theo số lượng điểm đã chỉ định. Giá trị x dương khiến camera di chuyển sang phải, do đó bản đồ có vẻ như đã di chuyển sang trái. Giá trị y dương khiến camera di chuyển xuống, do đó bản đồ có vẻ như đã di chuyển lên. Thao tác di chuyển tương ứng với hướng hiện tại của camera. Ví dụ: nếu camera có phương vị là 90 độ, thì hướng đông là "lên".
fitBounds:
- Biến đổi camera để căn giữa các ranh giới đã chỉ định trên màn hình ở mức thu phóng cao nhất có thể. Áp dụng khoảng đệm mặc định cho các ranh giới là 64 điểm.
fitBounds:withPadding:
- Biến đổi camera để căn giữa các ranh giới đã chỉ định trên màn hình ở mức thu phóng lớn nhất có thể. Sử dụng phương thức này để chỉ định cùng một khoảng đệm (tính bằng điểm) cho tất cả các cạnh của hộp giới hạn.
fitBounds:withEdgeInsets:
- Biến đổi camera để căn giữa các ranh giới đã chỉ định trên màn hình ở mức thu phóng lớn nhất có thể. Với
UIEdgeInsets
, bạn chỉ định khoảng đệm cho từng cạnh của hộp giới hạn một cách độc lập.
Dùng GMSMapView
để thay đổi một thuộc tính
GMSMapView
cung cấp một số phương thức cho phép bạn di chuyển camera mà không cần dùng đối tượng GMSCameraPosition
hoặc đối tượng GMSCameraUpdate
. Với các phương thức này, chẳng hạn như animateToLocation:
hoặc animateToZoom:
, bạn có thể tạo hiệu ứng cho một thay đổi đối với một thuộc tính camera duy nhất.
Ví dụ: sử dụng phương thức toViewingAngle:
để tạo hiệu ứng cho một thay đổi đối với độ nghiêng của camera.
Swift
mapView.animate(toViewingAngle: 45)
Objective-C
[mapView animateToViewingAngle:45];
Đặt mục tiêu (vị trí)
Vị trí này xác định tâm của bản đồ. Vị trí được chỉ định theo vĩ độ và kinh độ, đồng thời được biểu thị theo phương thức lập trình bằng CLLocationCoordinate2D
, được tạo bằng CLLocationCoordinate2DMake
.
Sử dụng GMSCameraPosition
để thay đổi vị trí. Trong ví dụ này, bản đồ sẽ chuyển nhanh đến vị trí mới.
Swift
let target = CLLocationCoordinate2D(latitude: -33.868, longitude: 151.208) mapView.camera = GMSCameraPosition(target: target, zoom: 6)
Objective-C
CLLocationCoordinate2D target = CLLocationCoordinate2DMake(-33.868, 151.208); mapView.camera = [GMSCameraPosition cameraWithTarget:target zoom:6];
Để tạo hiệu ứng cho thay đổi và di chuyển bản đồ đến vị trí mới, bạn có thể sử dụng phương thức animateToCameraPosition:
thay vì đặt thuộc tính camera
. Hoặc sử dụng phương thức animateToLocation:
trên GMSMapView
.
Swift
mapView.animate(toLocation: CLLocationCoordinate2D(latitude: -33.868, longitude: 151.208))
Objective-C
[mapView animateToLocation:CLLocationCoordinate2DMake(-33.868, 151.208)];
Bạn cũng có thể tạo một đối tượng GMSCameraUpdate
để di chuyển camera. Sử dụng phương thức tích hợp scrollByX:Y:
để chỉ định số lượng điểm cần cuộn camera theo hướng X và Y. Trong ví dụ này, bạn di chuyển camera 200 điểm sang phải và 100 điểm xuống dưới:
Swift
// Move the camera 200 points to the right, and 100 points downwards let downwards = GMSCameraUpdate.scrollBy(x: 200, y: 100) mapView.animate(with: downwards)
Objective-C
// Move the camera 200 points to the right, and 100 points downwards GMSCameraUpdate *downwards = [GMSCameraUpdate scrollByX:200.0 Y:100.0]; [mapView animateWithCameraUpdate:downwards];
Đặt hướng (phương vị)
Hướng là hướng la bàn, được đo bằng độ so với hướng bắc thực, cho cạnh trên của bản đồ. Ví dụ: hướng xoay 90 độ sẽ tạo ra một bản đồ có cạnh trên cùng hướng về phía đông.
Đặt hướng theo phương thức lập trình bằng GMSCameraPosition
hoặc GMSCameraUpdate
hoặc bằng phương thức animateToBearing:
của GMSMapView
.
Swift
mapView.animate(toBearing: 0)
Objective-C
[mapView animateToBearing:0];
Đặt độ nghiêng (góc nhìn)
Góc nhìn là vị trí của camera trên một vòng cung giữa vị trí chính giữa của bản đồ và bề mặt Trái Đất, được đo bằng độ từ điểm thiên để (hướng chỉ thẳng xuống dưới camera). Khi bạn thay đổi góc xem, bản đồ sẽ xuất hiện ở chế độ phối cảnh, với các đối tượng giữa camera và vị trí trên bản đồ xuất hiện lớn hơn theo tỷ lệ, còn các đối tượng ngoài vị trí trên bản đồ xuất hiện nhỏ hơn theo tỷ lệ, tạo ra hiệu ứng ba chiều.
Góc nhìn có thể nằm trong khoảng từ 0 (chỉ thẳng xuống bản đồ) và tối đa tuỳ thuộc vào mức thu phóng. Đối với mức thu phóng từ 16 trở lên, góc tối đa là 65 độ. Đối với mức thu phóng từ 10 trở xuống, góc tối đa là 30 độ.
Đặt góc xem theo phương thức lập trình bằng GMSCameraPosition
hoặc GMSCameraUpdate
hoặc bằng phương thức animateToViewingAngle:
của GMSMapView
.
Swift
mapView.animate(toViewingAngle: 45)
Objective-C
[mapView animateToViewingAngle:45];
Đặt mức thu phóng
Mức thu phóng của camera sẽ xác định tỷ lệ của bản đồ. Ở mức thu phóng lớn hơn, bạn có thể xem thêm chi tiết trên màn hình, còn ở mức thu phóng nhỏ hơn, bạn có thể xem thêm thông tin về thế giới.
Đặt mức thu phóng theo phương thức lập trình bằng GMSCameraPosition
hoặc GMSCameraUpdate
hoặc bằng phương thức animateToZoom:
của GMSMapView
.
Swift
mapView.animate(toZoom: 12)
Objective-C
[mapView animateToZoom:12];
Ví dụ sau đây sử dụng phương thức zoomIn:
để tạo một đối tượng GMSCameraUpdate
nhằm tạo hiệu ứng thu phóng một cấp từ cấp hiện tại.
Swift
// Zoom in one zoom level let zoomCamera = GMSCameraUpdate.zoomIn() mapView.animate(with: zoomCamera)
Objective-C
// Zoom in one zoom level GMSCameraUpdate *zoomCamera = [GMSCameraUpdate zoomIn]; [mapView animateWithCameraUpdate:zoomCamera];
Đặt ra giới hạn
Để di chuyển camera sao cho toàn bộ khu vực mà bạn quan tâm đều xuất hiện ở mức thu phóng lớn nhất có thể, hãy đặt ranh giới cho chế độ xem camera. Ví dụ: nếu bạn muốn hiển thị tất cả các trạm xăng trong phạm vi 5 dặm tính từ vị trí hiện tại của người dùng, hãy di chuyển camera để tất cả các trạm xăng đều xuất hiện trên màn hình:
- Tính toán
GMSCoordinateBounds
mà bạn muốn hiển thị trên màn hình. - Sử dụng phương thức
cameraForBounds:insets:
củaGMSMapView
để trả về mộtGMSCameraPosition
mới.
Đặt các ranh giới này sao cho GMSCoordinateBounds
đã cho hoàn toàn phù hợp với kích thước bản đồ hiện tại. Xin lưu ý rằng phương thức này đặt độ nghiêng và hướng của bản đồ thành 0.
Ví dụ sau đây minh hoạ cách thay đổi camera để cả thành phố Vancouver và Calgary đều xuất hiện trong cùng một khung hiển thị.
Swift
let vancouver = CLLocationCoordinate2D(latitude: 49.26, longitude: -123.11) let calgary = CLLocationCoordinate2D(latitude: 51.05,longitude: -114.05) let bounds = GMSCoordinateBounds(coordinate: vancouver, coordinate: calgary) let camera = mapView.camera(for: bounds, insets: UIEdgeInsets())! mapView.camera = camera
Objective-C
CLLocationCoordinate2D vancouver = CLLocationCoordinate2DMake(49.26, -123.11); CLLocationCoordinate2D calgary = CLLocationCoordinate2DMake(51.05, -114.05); GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithCoordinate:vancouver coordinate:calgary]; GMSCameraPosition *camera = [mapView cameraForBounds:bounds insets:UIEdgeInsetsZero]; mapView.camera = camera;
Hạn chế thao tác xoay của người dùng trong một khu vực nhất định
Những trường hợp này đặt ranh giới cho bản đồ nhưng sau đó người dùng có thể cuộn hoặc di chuyển bên ngoài ranh giới này. Thay vào đó, bạn có thể muốn giới hạn phạm vi tâm toạ độ của tiêu điểm trên bản đồ (mục tiêu của camera) để người dùng chỉ có thể cuộn và di chuyển trong phạm vi này.
Ví dụ: một ứng dụng bán lẻ cho trung tâm mua sắm hoặc sân bay có thể muốn giới hạn bản đồ trong phạm vi cụ thể, cho phép người dùng di chuyển và thu phóng trong phạm vi đó.
Để hạn chế thao tác xoay và thu phóng trong phạm vi cụ thể, hãy đặt thuộc tính cameraTargetBounds
của GMSMapView
thành một đối tượng GMSCoordinateBounds
xác định phạm vi bắt buộc.
Để xoá hạn chế sau này, hãy đặt cameraTargetBounds
thành nil.
Swift
mapView.cameraTargetBounds = bounds
Objective-C
mapView.cameraTargetBounds = bounds;
Sơ đồ sau đây minh hoạ một trường hợp khi đích của camera bị giới hạn trong một khu vực lớn hơn một chút so với khung hiển thị. Người dùng có thể cuộn và xoay, miễn là mục tiêu của camera vẫn nằm trong khu vực có ranh giới. Dấu thập biểu thị mục tiêu của camera:
Bản đồ luôn lấp đầy khung nhìn, ngay cả khi điều đó dẫn đến việc khung nhìn hiển thị các khu vực nằm ngoài ranh giới đã xác định. Ví dụ: nếu bạn đặt mục tiêu camera ở một góc của khu vực có ranh giới, thì khu vực bên ngoài góc đó sẽ xuất hiện trong khung hiển thị nhưng người dùng không thể cuộn thêm vào khu vực đó. Sơ đồ sau đây minh hoạ tình huống này. Dấu thập biểu thị mục tiêu của camera:
Trong sơ đồ sau, mục tiêu của camera có ranh giới rất hạn chế, khiến người dùng có rất ít cơ hội để cuộn hoặc xoay bản đồ. Dấu thập này đại diện cho mục tiêu của camera:
Đặt mức thu phóng tối thiểu hoặc tối đa
Các hằng số chung kGMSMinZoomLevel
và kGMSMaxZoomLevel
xác định giá trị thu phóng tối thiểu hoặc tối đa. Theo mặc định, các thuộc tính minZoom
và maxZoom
của GMSMapView
được đặt thành các hằng số này.
Để hạn chế phạm vi mức thu phóng có sẵn cho bản đồ, hãy đặt mức thu phóng tối thiểu và tối đa. Đoạn mã sau đây giới hạn mức thu phóng trong khoảng từ 10 đến 15.
Swift
let camera = GMSCameraPosition( latitude: 41.887, longitude: -87.622, zoom: 12 ) let mapView = GMSMapView(frame: .zero, camera: camera) mapView.setMinZoom(10, maxZoom: 15)
Objective-C
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:41.887 longitude:-87.622 zoom:12]; GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; [mapView setMinZoom:10 maxZoom:15];
Bạn phải đặt phạm vi thu phóng bằng phương thức setMinZoom:maxZoom:
; tuy nhiên, bạn có thể đọc các giá trị hiện tại bằng cách sử dụng các thuộc tính minZoom
và maxZoom
. Phương pháp này hữu ích khi bạn chỉ hạn chế một trong các giá trị. Đoạn mã sau đây chỉ thay đổi mức thu phóng tối thiểu.
Swift
mapView.setMinZoom(12, maxZoom: mapView.maxZoom)
Objective-C
[mapView setMinZoom:12 maxZoom:mapView.maxZoom];
Nếu sau khi cập nhật mức thu phóng tối thiểu và tối đa, mức thu phóng của camera được đặt thành một giá trị nằm ngoài phạm vi mới, thì mức thu phóng hiện tại sẽ tự động cập nhật để hiển thị giá trị hợp lệ gần nhất. Ví dụ: trong mã sau, mức thu phóng ban đầu được xác định là 4. Khi dải ô thu phóng được đặt thành 10-15, mức thu phóng hiện tại sẽ được cập nhật thành 10.
Swift
// Sets the zoom level to 4. let camera2 = GMSCameraPosition( latitude: 41.887, longitude: -87.622, zoom: 4 ) let mapView2 = GMSMapView(frame: .zero, camera: camera) // The current zoom, 4, is outside of the range. The zoom will change to 10. mapView.setMinZoom(10, maxZoom: 15)
Objective-C
// Sets the zoom level to 4. GMSCameraPosition *camera2 = [GMSCameraPosition cameraWithLatitude:41.887 longitude:-87.622 zoom:4]; GMSMapView *mapView2 = [GMSMapView mapWithFrame:CGRectZero camera:camera]; // The current zoom, 4, is outside of the range. The zoom will change to 10. [mapView setMinZoom:10 maxZoom:15];