กล้องช่วยให้คุณเปลี่ยนมุมมองของผู้ใช้ในแผนที่ได้
คุณใช้โหมดกล้องเพื่อควบคุมลักษณะการทำงานของ
แผนที่ในระหว่างการนำทางได้ หากต้องการตั้งค่าโหมดกล้อง ให้ตั้งค่าพร็อพเพอร์ตี้ 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;
จัดกึ่งกลางแผนที่ใหม่โดยอัตโนมัติ
เมื่อผู้ใช้เลื่อนแผนที่ในโหมดการนำทาง โหมดกล้องสำหรับ Map View จะเปลี่ยนจากโหมดติดตามเป็นโหมดอิสระ กล้องจะกลับไปที่โหมดติดตามเมื่อผู้ใช้กดจัดกึ่งกลางอย่างชัดเจน คุณสามารถตั้งค่าให้ระบบ กลับไปใช้โหมดกำลังติดตามโดยอัตโนมัติได้โดยใช้ตัวจับเวลาเพื่อกำหนดช่วงเวลาระหว่างการออกจาก โหมดกำลังติดตาม แล้วกลับไปใช้โหมดดังกล่าวโดยอัตโนมัติ
ตัวอย่าง
ตัวอย่างโค้ดต่อไปนี้จะตรวจสอบว่าผู้ใช้กำลังเลื่อนแผนที่ขณะอยู่ในโหมดการนำทางหรือไม่ หากเป็นเช่นนั้น ระบบจะตั้งเวลานับถอยหลังเพื่อเปลี่ยน โหมดกล้องเป็นโหมดติดตาม โดยจะจัดกึ่งกลางแผนที่หลังจากผ่านไป 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