Камера позволяет менять точку обзора карты. Режимы камеры позволяют управлять поведением карты во время навигации. Чтобы задать режим камеры, задайте свойство cameraMode
вида карты, указав одну из следующих констант режима камеры:
Следование — режим камеры по умолчанию для навигации. Изменяет угол обзора на 45 градусов и помещает камеру за текущую позицию лицом по направлению движения. Во время навигации камера автоматически поворачивается по направлению движения. Нажатие кнопки «Повторное центрирование» на карте также переключит её в этот режим. Кнопка «Повторное центрирование» не отображается в этом режиме.
Обзор — отображает обзор всего маршрута, масштабируя его по мере необходимости, чтобы он поместился на карте. При выборе этого режима отображается кнопка «Повторить центрирование» .
Бесплатно — позволяет пользователю изменять вид карты с помощью жестов . В этом режиме камера остаётся неподвижной. Карта автоматически переходит в этот режим, если пользователь панорамирует или масштабирует карту во время навигации. При выборе этого режима отображается кнопка «Повторить центрирование» .
Чтобы изменить режим камеры, задайте свойство cameraMode
вида карты, как показано здесь:
Быстрый
// 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;
Автоматически центрировать карту
При перемещении карты в режиме навигации режим камеры для просмотра карты меняется с режима отслеживания на свободный. Камера возвращается в режим отслеживания, когда пользователь нажимает кнопку «Повторить центрирование» . Вы можете автоматизировать возврат в режим отслеживания, установив таймер между выходом из режима отслеживания и автоматическим возвратом в него.
Пример
Следующий пример кода проверяет, перемещает ли пользователь карту в режиме навигации. Если перемещает, запускается таймер для переключения камеры в режим слежения, центрируя карту через пять секунд.
Быстрый
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