Установка уровня масштабирования для MKMapView - PullRequest
105 голосов
/ 16 ноября 2010

У меня есть карта, которая показывает правильно, единственное, что я хочу сейчас сделать, это установить уровень масштабирования при загрузке.Есть ли способ сделать это?

Спасибо

Ответы [ 13 ]

2 голосов
/ 16 октября 2015

Ответ Swift 2.0 с использованием NSUserDefaults для сохранения и восстановления масштаба и положения карты.

Функция сохранения положения карты и масштабирования:

func saveMapRegion() {
    let mapRegion = [
        "latitude" : mapView.region.center.latitude,
        "longitude" : mapView.region.center.longitude,
        "latitudeDelta" : mapView.region.span.latitudeDelta,
        "longitudeDelta" : mapView.region.span.longitudeDelta
    ]
    NSUserDefaults.standardUserDefaults().setObject(mapRegion, forKey: "mapRegion")
}

Запускать функцию при каждом перемещении карты:

func mapView(mapView: MKMapView, regionDidChangeAnimated animated: Bool) 
{
        saveMapRegion();
}

Функция сохранения масштаба и положения карты:

func restoreMapRegion() 
{
    if let mapRegion = NSUserDefaults.standardUserDefaults().objectForKey("mapRegion") 
    {

        let longitude = mapRegion["longitude"] as! CLLocationDegrees
        let latitude = mapRegion["latitude"] as! CLLocationDegrees
        let center = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)

        let longitudeDelta = mapRegion["latitudeDelta"] as! CLLocationDegrees
        let latitudeDelta = mapRegion["longitudeDelta"] as! CLLocationDegrees
        let span = MKCoordinateSpan(latitudeDelta: latitudeDelta, longitudeDelta: longitudeDelta)

        let savedRegion = MKCoordinateRegion(center: center, span: span)

        self.mapView.setRegion(savedRegion, animated: false)
    }
}

Добавьте это к viewDidLoad:

restoreMapRegion()
2 голосов
/ 09 ноября 2013

Я знаю, что это поздний ответ, но я просто хотел решить вопрос настройки уровня масштабирования самостоятельно. Ответ goldmine великолепен, но я обнаружил, что в моем приложении он работает недостаточно хорошо.

При ближайшем рассмотрении Goldmine утверждает, что "линии долготы одинаково разнесены в любой точке карты". Это не так, на самом деле линии широты расположены на одинаковом расстоянии от -90 (южный полюс) до +90 (северный полюс). На экваторе линии широты долготы расположены максимально широко, сходясь к точке на полюсах.

Поэтому принятая мною реализация использует вычисление широты следующим образом:

@implementation MKMapView (ZoomLevel)

- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate
    zoomLevel:(NSUInteger)zoom animated:(BOOL)animated
{
    MKCoordinateSpan span = MKCoordinateSpanMake(180 / pow(2, zoom) * 
        self.frame.size.height / 256, 0);
    [self setRegion:MKCoordinateRegionMake(coordinate, span) animated:animated];
}

@end

Надеюсь, это поможет на этой поздней стадии.

1 голос
/ 05 апреля 2019

Здесь я положил свой ответ и он работает для swift 4.2 .

MKMapView центр и увеличение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...