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