Я просматриваю страницы Google Maps SDK for iOS Getting Started, чтобы узнать, как масштабировать и центрировать представление на заданных границах. Код для этого приведен в Build a GMSCameraPosition, в котором говорится: «Иногда полезно перемещать камеру таким образом, чтобы вся область интереса была видна при максимально возможном уровне масштабирования».Fit bounds не работает должным образом
Данная редакция: similar to another possible approach via a GMSCameraUpdate, «Возвращает GMSCameraUpdate, который преобразует камеру таким образом, чтобы указанные границы были центрированы на экране с максимально возможным уровнем масштабирования».
Код ниже берется прямо из двух ссылок на страницах «Начало работы» - слегка адаптирован для обеспечения значимых скриншотов; адаптация не влияет на фактический результат.
- (void)loadView
{
// Create a GMSCameraPosition that tells the map to display the
// coordinate -33.86,151.20 at zoom level 6.
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
longitude:151.20
zoom:6];
mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView_.myLocationEnabled = YES;
self.view = mapView_;
CLLocationCoordinate2D vancouver = CLLocationCoordinate2DMake(49.26, -123.11);
CLLocationCoordinate2D calgary = CLLocationCoordinate2DMake(51.05, -114.05);
GMSMarker *vancouverMarker = [[GMSMarker alloc] init];
vancouverMarker.position = vancouver;
vancouverMarker.title = @"Vancouver";
vancouverMarker.map = mapView_;
GMSMarker *calgaryMarker = [[GMSMarker alloc] init];
calgaryMarker.position = calgary;
calgaryMarker.title = @"Calgary";
calgaryMarker.map = mapView_;
GMSCoordinateBounds *bounds =
[[GMSCoordinateBounds alloc] initWithCoordinate:vancouver coordinate:calgary];
[mapView_ moveCamera:[GMSCameraUpdate fitBounds:bounds]];
//These last two lines are expected to give the same result as the above line
//camera = [mapView_ cameraForBounds:bounds insets:UIEdgeInsetsZero];
//mapView_.camera = camera;
}
Однако ожидаемый результат не соответствует фактическому результату.
Ожидаемый результат
Фактический результат
Возможно, я запутался о значении "максимально возможного уровня масштабирования." Я предполагаю, что это означает, что он приближен, но не увеличен. В любом случае, что я делаю неправильно или это ошибка?
Привет, Брет, хорошая идея выделить GMSMapView в viewDidAppear? Или, может быть, было бы лучше сохранить создание карты в loadView, но нажмите обновление камеры для просмотраDidAppear (или, возможно, viewWillAppear)? –
Я думал об этом, но никогда не пробовал. Я не знаю, почему Google использует (void) loadView, но это то, что я могу изучить вне этого вопроса. Спасибо, Брет! –
Где мы использовали loadView? Я рад обновить опубликованный образец кода по мере необходимости =) – Brett