Điều chỉnh máy ảnh
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Camera cho phép bạn thay đổi điểm nhìn của người dùng trên bản đồ. Bạn có thể dùng các chế độ camera để kiểm soát hành vi của bản đồ trong quá trình điều hướng. Để đặt chế độ camera, hãy đặt thuộc tính cameraMode
của khung hiển thị bản đồ, chỉ định một trong các hằng số chế độ camera sau:
Theo dõi – Chế độ camera mặc định để chỉ đường. Thay đổi góc nhìn thành 45 độ và đặt camera phía sau vị trí hiện tại, hướng về phía trước theo hướng di chuyển. Trong khi bạn đi theo chỉ dẫn, camera sẽ tự động điều chỉnh để hướng về phía trước. Khi nhấn nút Chỉnh tâm của bản đồ, bạn cũng sẽ chuyển sang chế độ này. Nút Căn giữa lại sẽ không xuất hiện khi bạn chọn chế độ này.
Tổng quan – Hiển thị thông tin tổng quan về toàn bộ tuyến đường, phóng to khi cần để vừa với tuyến đường vào chế độ xem bản đồ. Khi bạn chọn chế độ xem này, nút Định tâm lại sẽ xuất hiện.
Miễn phí – Cho phép người dùng thay đổi chế độ xem bản đồ bằng cử chỉ.
Camera vẫn đứng yên ở chế độ xem này. Bản đồ sẽ tự động chuyển sang chế độ xem này nếu người dùng di chuyển hoặc thu phóng trong khi đi theo chỉ dẫn. Khi bạn chọn chế độ xem này, nút Định tâm lại sẽ xuất hiện.
Để thay đổi chế độ camera, hãy đặt thuộc tính cameraMode
của khung hiển thị bản đồ, như minh hoạ ở đây:
Swift
// Set the mode to "overview":
mapView.cameraMode = .overview
// Set the mode to "free":
mapView.cameraMode = .free
// Set the mode to "following":
mapView.cameraMode = .following
Objective-C
// Set the mode to "overview":
mapView.cameraMode = GMSNavigationCameraModeOverview;
// Set the mode to "free":
mapView.cameraMode = GMSNavigationCameraModeFree;
// Set the mode to "following":
mapView.cameraMode = GMSNavigationCameraModeFollowing;
Tự động căn lại bản đồ vào giữa
Khi người dùng di chuyển bản đồ ở chế độ Điều hướng, chế độ camera cho khung hiển thị bản đồ sẽ thay đổi từ chế độ theo dõi sang chế độ tự do. Camera sẽ chuyển về chế độ theo dõi khi người dùng nhấn rõ ràng vào nút Lấy lại tâm. Bạn có thể tự động chuyển về chế độ theo dõi bằng cách dùng bộ hẹn giờ để đặt khoảng thời gian giữa lúc rời khỏi chế độ theo dõi và lúc tự động chuyển về chế độ này.
Ví dụ:
Ví dụ về mã sau đây sẽ kiểm tra để xác định xem người dùng có đang di chuyển bản đồ khi ở chế độ Chỉ đường hay không. Nếu có, thì phương thức này sẽ đặt một bộ hẹn giờ để chuyển chế độ camera sang chế độ đi theo, căn giữa bản đồ sau 5 giây.
Swift
class YourViewController: UIViewController {
@IBOutlet weak var mapView: GMSMapView!
var autoFollowTimer: Timer!
override func viewDidLoad() {
super.viewDidLoad()
mapView.delegate = self
...
}
...
}
/** Implements the GMSMapViewDelegate protocol. */
extension YourViewController: GMSMapViewDelegate {
func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
if mapView.navigator?.isGuidanceActive == false {return}
if !gesture {return}
autoFollowTimer?.invalidate()
autoFollowTimer = Timer(
timeInterval: TimeInterval(5.0),
target: self,
selector: #selector(recenterMap),
userInfo: nil,
repeats: false)
RunLoop.current.add(autoFollowTimer, forMode: .default)
}
/** Centers the map in guidance mode. */
@objc private func recenterMap() {
if mapView.navigator?.isGuidanceActive == true {
mapView.cameraMode = .following
}
autoFollowTimer.invalidate()
autoFollowTimer = nil
}
}
Objective-C
@interface YourViewController : UIViewController<GMSMapViewDelegate>
...
@end
@implementation YourViewController {
GMSMapView *_mapView;
NSTimer *_autoFollowTimer;
...
}
...
- (void)viewDidLoad {
[super viewDidLoad];
...
_mapView.delegate = self;
...
}
...
/** Implements the GMSMapViewDelegate protocol. */
- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture {
if (!_mapView.navigator.guidanceActive) return;
if (!gesture) return;
[_autoFollowTimer invalidate];
_autoFollowTimer = [NSTimer scheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(recenterMap)
userInfo:nil
repeats:NO];
}
/** Centers the map in guidance mode. */
- (void)recenterMap {
if (_mapView.navigator.guidanceActive) {
_mapView.cameraMode = GMSNavigationCameraModeFollowing;
}
[_autoFollowTimer invalidate];
_autoFollowTimer = nil;
}
@end
Trừ phi có lưu ý khác, nội dung của trang này được cấp phép theo Giấy phép ghi nhận tác giả 4.0 của Creative Commons và các mẫu mã lập trình được cấp phép theo Giấy phép Apache 2.0. Để biết thông tin chi tiết, vui lòng tham khảo Chính sách trang web của Google Developers. Java là nhãn hiệu đã đăng ký của Oracle và/hoặc các đơn vị liên kết với Oracle.
Cập nhật lần gần đây nhất: 2025-08-31 UTC.
[null,null,["Cập nhật lần gần đây nhất: 2025-08-31 UTC."],[[["\u003cp\u003eYou can change the user's viewpoint of the map by setting the \u003ccode\u003ecameraMode\u003c/code\u003e property to \u003ccode\u003efollowing\u003c/code\u003e, \u003ccode\u003eoverview\u003c/code\u003e, or \u003ccode\u003efree\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eFollowing\u003c/code\u003e mode puts the camera behind the current position, \u003ccode\u003eoverview\u003c/code\u003e mode displays the entire route, and \u003ccode\u003efree\u003c/code\u003e mode allows user interaction.\u003c/p\u003e\n"],["\u003cp\u003eThe map automatically enters \u003ccode\u003efree\u003c/code\u003e mode when the user pans or zooms, and a \u003cstrong\u003eRe-center\u003c/strong\u003e button is available in \u003ccode\u003eoverview\u003c/code\u003e and \u003ccode\u003efree\u003c/code\u003e modes to return to \u003ccode\u003efollowing\u003c/code\u003e mode.\u003c/p\u003e\n"],["\u003cp\u003eYou can automate the return to \u003ccode\u003efollowing\u003c/code\u003e mode after a set time interval using a timer to improve user experience.\u003c/p\u003e\n"]]],[],null,["# Adjust the camera\n\nThe [camera](/maps/documentation/ios-sdk/views) allows you to change the user's\nviewpoint of the map. You can use camera modes to control the behavior of the\nmap during navigation. To set the camera mode, set the `cameraMode` property of\nthe map view, specifying one of the following camera mode constants:\n\n- Following --- The default camera mode for navigation. Changes the view\n angle to 45 degrees and puts the camera behind the current position facing in\n the direction of travel. During navigation the camera automatically adjusts\n to face in the direction of travel. Pressing the map's **Re-center** button\n will also switch to this mode. The **Re-center** button is not visible when\n this mode is selected.\n\n- Overview --- Displays an overview of the entire route, zooming as needed\n to fit the route into the map view. When this view is selected the\n **Re-center** button is visible.\n\n- Free --- Lets the user change the map view with [gestures](/maps/documentation/navigation/ios-sdk/controls).\n The camera remains stationary in this view. The map will automatically enter\n this view if the user pans or zooms during navigation. When this view is\n selected the **Re-center** button is visible.\n\nTo change the camera mode, set the `cameraMode` property of the map view, as\nshown here:\n\n\u003cbr /\u003e\n\n### Swift\n\n\u003cbr /\u003e\n\n // Set the mode to \"overview\":\n mapView.cameraMode = .overview\n\n // Set the mode to \"free\":\n mapView.cameraMode = .free\n\n // Set the mode to \"following\":\n mapView.cameraMode = .following\n\n\u003cbr /\u003e\n\n### Objective-C\n\n\u003cbr /\u003e\n\n // Set the mode to \"overview\":\n mapView.cameraMode = GMSNavigationCameraModeOverview;\n\n // Set the mode to \"free\":\n mapView.cameraMode = GMSNavigationCameraModeFree;\n\n // Set the mode to \"following\":\n mapView.cameraMode = GMSNavigationCameraModeFollowing;\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nAutomatically recenter the map\n------------------------------\n\nWhen users move the map in Navigation mode, the camera mode for the map\nview changes from following mode to free mode. The camera returns to following\nmode when the user explicitly presses **Re-center**. You can automate the\nreturn to following mode by using a timer to set an interval between leaving\nfollowing mode, and then automatically returning to it.\n\n### Example\n\nThe following code example checks to determine whether the map is being moved by\nthe user while in Navigation mode. If it is, then it sets a timer to switch the\ncamera mode to following mode, centering the map after five seconds.\n\n\u003cbr /\u003e\n\n### Swift\n\n\u003cbr /\u003e\n\n class YourViewController: UIViewController {\n\n @IBOutlet weak var mapView: GMSMapView!\n var autoFollowTimer: Timer!\n\n override func viewDidLoad() {\n super.viewDidLoad()\n mapView.delegate = self\n ...\n }\n\n ...\n }\n\n /** Implements the GMSMapViewDelegate protocol. */\n extension YourViewController: GMSMapViewDelegate {\n func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {\n if mapView.navigator?.isGuidanceActive == false {return}\n if !gesture {return}\n\n autoFollowTimer?.invalidate()\n autoFollowTimer = Timer(\n timeInterval: TimeInterval(5.0),\n target: self,\n selector: #selector(recenterMap),\n userInfo: nil,\n repeats: false)\n RunLoop.current.add(autoFollowTimer, forMode: .default)\n }\n\n /** Centers the map in guidance mode. */\n @objc private func recenterMap() {\n if mapView.navigator?.isGuidanceActive == true {\n mapView.cameraMode = .following\n }\n\n autoFollowTimer.invalidate()\n autoFollowTimer = nil\n }\n }\n\n\u003cbr /\u003e\n\n### Objective-C\n\n\u003cbr /\u003e\n\n @interface YourViewController : UIViewController\u003cGMSMapViewDelegate\u003e\n ...\n @end\n\n\n @implementation YourViewController {\n GMSMapView *_mapView;\n NSTimer *_autoFollowTimer;\n ...\n }\n\n ...\n\n - (void)viewDidLoad {\n [super viewDidLoad];\n ...\n _mapView.delegate = self;\n ...\n }\n\n ...\n\n /** Implements the GMSMapViewDelegate protocol. */\n - (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture {\n if (!_mapView.navigator.guidanceActive) return;\n if (!gesture) return;\n\n [_autoFollowTimer invalidate];\n _autoFollowTimer = [NSTimer scheduledTimerWithTimeInterval:5.0\n target:self\n selector:@selector(recenterMap)\n userInfo:nil\n repeats:NO];\n }\n\n /** Centers the map in guidance mode. */\n - (void)recenterMap {\n if (_mapView.navigator.guidanceActive) {\n _mapView.cameraMode = GMSNavigationCameraModeFollowing;\n }\n\n [_autoFollowTimer invalidate];\n _autoFollowTimer = nil;\n }\n\n @end\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e"]]