Проблема с увеличением в MKMapView, когда она полностью уменьшена - PullRequest
3 голосов
/ 24 ноября 2011

Я уменьшаю карту при нажатии кнопки.

Поэтому, когда карта полностью уменьшается, и если я пытаюсь снова уменьшить ее, она падает при настройке региона.

Не уверен, но есть ли способ определить, достиг ли карта максимального предела увеличения?

Вот мой код для уменьшения карты

-(void)setZoomLevelForNoPicksCurrentLocationAt:(CLLocationCoordinate2D)currentCoordinate{
 MKCoordinateSpan span;
 MKCoordinateRegion region;
 region.center = currentCoordinate;
 span.latitudeDelta =self.mapView.region.span.latitudeDelta *2;
 span.longitudeDelta =self.mapView.region.span.longitudeDelta *2;
 region.span = span;
 [self.mapView setRegion:region animated:YES];  
 [self.mapView regionThatFits:region];
}

Любой видпомощь будет очень признателен.

Пожалуйста, найдите журнал сбоев

* Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Неверный центр региона: +38.82259098, -67.50000000, диапазон: +307.41536753, +450.00000000 '* Стек вызовов при первом броске: (0 CoreFoundation 0x013c8be9 __exceptionPreprocess + 185 1 libobjc.A.dylib 0x0151d5c2 objc_exception 0F217 3 XXXapp 0x000ab237 - [MapViewController setZoomLevelForNoPicksCurrentLocationAt:] + 312

Ответы [ 3 ]

11 голосов
/ 24 ноября 2011

Минимальное значение диапазона, которое вы можете предоставить, составляет 0,0.Во время выполнения значение span становится отрицательным, что вызывает сбой.Просто жесткий шнур и попробуйте поставить nslog, чтобы отслеживать значение span.Максимальное значение диапазона на 180.0 выше, что приведет к сбою.

4 голосов
/ 25 июня 2015

Я только что добавил следующие проверки в расчет дельт, которые предотвращают сбои при применении региона:

//calculate deltas
double deltaLat = fabs(max_lat - min_lat) * 2;
if (deltaLat > 180) deltaLat = 180;

double deltaLong = fabs(max_long - min_long) * 2;
if (deltaLong>360) deltaLong = 360;

Таким образом, широта дельты региона не может быть больше 180, а долгота больше 360.

0 голосов
/ 03 июля 2017

Решение в Swift 3.0 после нескольких проб и ошибок.

Вот как я вычислил свои дельты:

let distanceLat = min(abs((currentLatitude! - pinLatitude) * 5), 180)
let distanceLon = min(abs((currentLongitude! - pinLongitude) * 5), 180)

* 5 - произвольное значение, вы можете изменить его, как хотите.

...