Điều chỉnh camera

Camera (Máy ảnh) 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ế độ máy ảnh để kiểm soát hành vi của bản đồ trong khi điều hướng. Để đặt chế độ máy ảnh, hãy đặt thuộc tính cameraMode của chế độ xem bản đồ, chỉ định một trong các hằng số chế độ máy ảnh sau:

  • Theo dõi — Chế độ máy ảnh mặc định để chỉ đường. Thay đổi góc nhìn thành 45 độ và đặt máy ảnh phía sau vị trí hiện tại, hướng về hướng di chuyển. Trong khi đi theo chỉ dẫn, máy ảnh sẽ tự động điều chỉnh để hướng về hướng di chuyển. Việc nhấn nút Chỉnh tâm của bản đồ cũng sẽ chuyển sang chế độ này. Nút Đặt lại tâm 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, thu phóng khi cần để vừa với tuyến đường trong chế độ xem bản đồ. Khi bạn chọn chế độ xem này, nút Re-center (Đặt lại tâm) sẽ xuất hiện.

  • Tự do – Cho phép người dùng thay đổi chế độ xem bản đồ bằng cử chỉ. Máy ảnh vẫn đứng yên trong chế độ xem này. Bản đồ sẽ tự động chuyển sang chế độ xem này nếu người dùng xoay hoặc thu phóng trong khi điều hướng. Khi bạn chọn chế độ xem này, nút Re-center (Đặt lại tâm) sẽ xuất hiện.

Để thay đổi chế độ máy ảnh, hãy đặt thuộc tính cameraMode của chế độ xem bản đồ, như minh hoạ dưới đâ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ế độ Điều hướng, chế độ máy ảnh cho chế độ xem bản đồ sẽ thay đổi từ chế độ theo dõi thành chế độ tự do. Máy ảnh sẽ quay lại chế độ theo dõi khi người dùng nhấn rõ ràng vào Đặt lại tâm. 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 và sau đó tự động quay lại chế độ đó.

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 đồ hay không trong chế độ Điều hướng. Nếu có, thì ứng dụng sẽ đặt hẹn giờ để chuyển đổi chế độ máy ảnh 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