カメラを調整する
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
カメラを使用すると、ユーザーの地図の視点位置を変更できます。カメラモードを使用すると、ナビゲーション中の地図の動作を制御できます。カメラモードを設定するには、マップビューの cameraMode
プロパティを設定し、次のカメラモード定数のいずれかを指定します。
追跡モード - ナビゲーションのデフォルトのカメラモード。ビューの角度を 45 度に変更し、カメラを現在の位置の後ろに移動して、進行方向を向かせます。ナビゲーション中は、カメラが自動的に進行方向を向くように調整されます。地図の [現在地を地図の中心にする] ボタンを押すと、このモードに切り替わります。このモードを選択すると、[再センタリング] ボタンは表示されません。
概要 - ルート全体を概要表示します。必要に応じて、ルートが地図ビューに収まるようにズームします。このビューが選択されている場合、[再センタリング] ボタンが表示されます。
Free - ジェスチャーで地図のビューを変更できます。このビューではカメラは静止したままです。ナビゲーション中にユーザーが地図をパンまたはズームすると、地図は自動的にこのビューに切り替わります。このビューが選択されている場合、[再センタリング] ボタンが表示されます。
カメラモードを変更するには、次のように地図ビューの 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
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-09-04 UTC。
[null,null,["最終更新日 2025-09-04 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"]]