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ể sử dụng các chế độ camera để kiểm soát hành vi của bản đồ trong khi chỉ đườ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:
Following (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 theo hướng di chuyển. Trong khi chỉ đường, camera sẽ tự động điều chỉnh để hướng theo hướng di chuyển. Khi nhấn vào nút Căn lại vào giữa của bản đồ, chế độ này cũng sẽ được chuyển sang. Nút Căn lại vào giữa sẽ không hiển thị khi bạn chọn chế độ này.
Overview (Tổng quan) – Hiển thị tổng quan về toàn bộ tuyến đường, thu phóng khi cần để vừa với tuyến đường trong khung hiển thị bản đồ. Khi bạn chọn khung hiển thị này, nút Căn lại vào giữa sẽ hiển thị.
Free (Tự do) – Cho phép người dùng thay đổi khung hiển thị bản đồ bằng cử chỉ. Camera vẫn đứng yên trong khung hiển thị này. Bản đồ sẽ tự động chuyển sang khung hiển thị này nếu người dùng di chuyển hoặc thu phóng trong khi chỉ đường. Khi bạn chọn khung hiển thị này, nút Căn lại vào giữa sẽ hiển thị.
Để 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 vào giữa bản đồ
Khi người dùng di chuyển bản đồ ở chế độ Chỉ đường, chế độ camera cho khung hiển thị bản đồ sẽ thay đổi từ chế độ theo dõi sang chế độ tự do. Camera sẽ quay lại chế độ theo dõi khi người dùng nhấn rõ ràng vào nút Căn lại vào giữa. Bạn có thể tự động hoá việc quay lại chế độ theo dõi bằng cách sử dụng bộ hẹn giờ để đặt khoảng thời gian giữa việc rời khỏi chế độ theo dõi, sau đó tự động quay lại chế độ này.
Ví dụ:
Ví dụ về đoạn mã sau đây kiểm tra để xác định xem người dùng có đang di chuyển bản đồ hay không khi ở chế độ thao tác. Nếu có, thì đoạn mã này sẽ đặt bộ hẹn giờ để chuyển chế độ camera sang chế độ theo dõi, 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