У меня есть карта, которая отображается правильно, единственное, что я хочу сейчас сделать, это установить уровень масштабирования при загрузке. Есть ли способ сделать это?
Спасибо
Я нашел себе решение, которое очень простое и помогает. Используйте MKCoordinateRegionMakeWithDistance
для установки расстояния в метрах по вертикали и горизонтали, чтобы получить желаемый масштаб. И, конечно же, когда вы обновите свое местоположение, вы получите правильные координаты, или вы можете указать их прямо CLLocationCoordinate2D
при запуске, если это то, что вам нужно сделать:
CLLocationCoordinate2D noLocation;
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(noLocation, 500, 500);
MKCoordinateRegion adjustedRegion = [self.mapView regionThatFits:viewRegion];
[self.mapView setRegion:adjustedRegion animated:YES];
self.mapView.showsUserLocation = YES;
Swift:
let location = ...
let region = MKCoordinateRegion( center: location.coordinate, latitudinalMeters: CLLocationDistance(exactly: 5000)!, longitudinalMeters: CLLocationDistance(exactly: 5000)!)
mapView.setRegion(mapView.regionThatFits(region), animated: true)
MKCoordinateRegionMakeWithDistance
что в Swift все еще присутствует. Это решение работает!Основываясь на том факте, что линии долготы разнесены одинаково в любой точке карты, существует очень простая реализация для установки centerCoordinate и zoomLevel:
источник
- (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate zoomLevel:(NSUInteger)zoomLevel animated:(BOOL)animated { MKCoordinateSpan span = MKCoordinateSpanMake(0, 360/pow(2, zoomLevel)*self.frame.size.width/256); [self setRegion:MKCoordinateRegionMake(centerCoordinate, span) animated:animated]; }
double z = log2(360 * ((self.mapView.frame.size.width/256) / self.mapView.region.span.longitudeDelta));
Он не встроен, но я видел / использовал этот код. Это позволяет вам использовать это:
Примечание: это не мой код, я его не писал, поэтому не могу брать на себя ответственность
источник
Вы также можете масштабировать, используя MKCoordinateRegion и задав для него широту и дельту долготы. Ниже приведен краткий справочник, а вот справочник по iOS. Он не сделает ничего необычного, но должен позволить вам установить масштаб при рисовании карты.
Изменить 1:
источник
Простая реализация Swift, если вы используете розетки.
На основе ответа @Carnal.
источник
Быстрая реализация
источник
IBOutlet
для своегоmap
, вы определяете его какMapViewWithZoom
вместо простогоMKMapView
. Затем вы можете просто установить уровень масштабирования с помощьюmap.zoomLevel = 1
илиmap.zoomLevel = 0.5
mapView.zoomLevel -= 2
Для Swift 3 это довольно быстро:
Просто определите
<CLLocationDistance>
широту и долготу в метрах, и mapView подберет уровень масштабирования для ваших значений.источник
На основе отличного ответа @ AdilSoomro . Я придумал это:
источник
Надеюсь, следующий фрагмент кода вам поможет.
Вы можете выбрать любое значение вместо 0,5, чтобы уменьшить или увеличить уровень масштабирования. Я использовал эти методы при нажатии двух кнопок.
источник
Ответ Swift 2.0 с использованием NSUserDefaults для сохранения и восстановления масштаба и положения карты.
Функция сохранения положения карты и масштабирования:
Запускать функцию каждый раз при перемещении карты:
Функция сохранения масштаба и положения карты:
Добавьте это в viewDidLoad:
источник
Я знаю, что это запоздалый ответ, но я просто хотел сам решить проблему установки уровня масштабирования. Ответ goldmine отличный, но я обнаружил, что он недостаточно хорошо работает в моем приложении.
При ближайшем рассмотрении в Goldmine говорится, что «линии долготы одинаково разнесены в любой точке карты». Это неправда, на самом деле линии широты расположены одинаково от -90 (южный полюс) до +90 (северный полюс). Наибольшее расстояние между линиями долготы проходит на экваторе и сходится к точке на полюсах.
Поэтому принятая мной реализация заключается в использовании вычисления широты следующим образом:
Надеюсь, это поможет на этом позднем этапе.
источник
Swift:
locValue - ваша координата.
источник
Здесь я помещаю свой ответ и его работу для быстрой версии 4.2 .
MKMapView center и увеличить
источник
На основе ответа Квентинадама
Swift 5.1
источник
MKMapView
расширение на основе этого ответа (+ точность уровня масштабирования с плавающей запятой):источник