ปรับกล้อง

กล้องช่วยให้คุณเปลี่ยนมุมมองแผนที่ของผู้ใช้ได้ คุณใช้โหมดกล้องเพื่อควบคุมลักษณะการทำงานของแผนที่ระหว่างการนำทางได้ หากต้องการตั้งค่าโหมดกล้อง ให้ตั้งค่าพร็อพเพอร์ตี้ cameraMode ของมุมมองแผนที่ โดยระบุค่าคงที่ของโหมดกล้องอย่างใดอย่างหนึ่งต่อไปนี้

  • ติดตาม - โหมดกล้องเริ่มต้นสำหรับการนำทาง เปลี่ยนมุมมองเป็น 45 องศาและวางกล้องไว้ด้านหลังตำแหน่งปัจจุบันโดยหันไปตามทิศทางการเดินทาง ระหว่างการนำทาง กล้องจะปรับให้หันไปตามทิศทางการเดินทางโดยอัตโนมัติ การกดปุ่มจัดให้อยู่ตรงกลางอีกครั้งของแผนที่จะเปลี่ยนเป็นโหมดนี้ด้วย ปุ่มจัดให้อยู่ตรงกลางอีกครั้งจะไม่ปรากฏเมื่อเลือกโหมดนี้

  • ภาพรวม — แสดงภาพรวมของเส้นทางทั้งหมด โดยซูมตามความจำเป็นเพื่อให้เส้นทางพอดีกับมุมมองแผนที่ เมื่อเลือกมุมมองนี้ ปุ่มจัดให้อยู่ตรงกลางอีกครั้งจะปรากฏขึ้น

  • อิสระ - อนุญาตให้ผู้ใช้เปลี่ยนมุมมองแผนที่ด้วยท่าทางสัมผัส กล้องจะยังคงนิ่งอยู่ในมุมมองนี้ แผนที่จะเข้าสู่มุมมองนี้โดยอัตโนมัติหากผู้ใช้เลื่อนหรือซูมระหว่างการนำทาง เมื่อเลือกมุมมองนี้ ปุ่มจัดให้อยู่ตรงกลางอีกครั้งจะปรากฏขึ้น

หากต้องการเปลี่ยนโหมดกล้อง ให้ตั้งค่าพร็อพเพอร์ตี้ cameraMode ของมุมมองแผนที่ ดังที่แสดงที่นี่

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;

ปรับศูนย์กลางแผนที่โดยอัตโนมัติ

เมื่อผู้ใช้เลื่อนแผนที่ในโหมดการไปยังส่วนต่างๆ โหมดกล้องสำหรับมุมมองแผนที่จะเปลี่ยนจากโหมดติดตามเป็นโหมดอิสระ กล้องจะกลับสู่โหมดติดตามเมื่อผู้ใช้กดจัดให้อยู่ตรงกลางอีกครั้งอย่างชัดเจน คุณสามารถทำให้การกลับสู่โหมดติดตามเป็นแบบอัตโนมัติได้โดยใช้ตัวจับเวลาเพื่อตั้งค่าช่วงเวลาระหว่างการออกจากโหมดติดตาม แล้วกลับสู่โหมดติดตามโดยอัตโนมัติ

ตัวอย่าง

ตัวอย่างโค้ดต่อไปนี้จะตรวจสอบเพื่อดูว่าผู้ใช้กำลังเลื่อนแผนที่ขณะอยู่ในโหมดการไปยังส่วนต่างๆ หรือไม่ หากใช่ ระบบจะตั้งตัวจับเวลาเพื่อเปลี่ยนโหมดกล้องเป็นโหมดติดตาม โดยจัดแผนที่ให้อยู่ตรงกลางหลังจากผ่านไป 5 วินาที

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