Если я правильно понимаю, вы хотите сказать mapView «дай мне карту, которая имеет ширину 636 м» или «дай мне карту, которая имеет ширину 900 м».Но карта дает вам одинаковое расстояние в обоих направлениях.
Когда вы устанавливаете регион карты, вы, как правило, получаете не то, что просили, а лучшее соответствие.Вид карты смотрит на регион, который вы запросили, а затем создает регион, который соответствует вашему региону внутри него.Проблема состоит в том, что вид карты не точно увеличивает требуемый регион, он находит самый высокий уровень масштабирования, который позволяет видеть весь ваш регион.Он не будет использовать промежуточный уровень масштабирования.Вот почему при использовании setRegion:
карта всегда выглядит четкой.Вы можете вручную установить промежуточный уровень масштабирования, сжимая или уменьшая его, но не (насколько я знаю) программно.
Обратите внимание, что представление карты может изменить фактическую переменную region
, которую вы передаетеЭто.Вот документы:
При настройке нового региона карта может корректировать значение в параметре региона, чтобы оно точно соответствовало видимой области карты.Это нормально и делается для того, чтобы значение в свойстве региона всегда отражало видимую часть карты.Однако это означает, что если вы получите значение этого свойства сразу после вызова этого метода, возвращаемое значение может не соответствовать заданному вами значению.(Вы можете использовать regionThatFits: метод для определения региона, который будет фактически установлен картой.)
Вы можете увидеть разницу в регионах, зарегистрировав регион, который вы ему дали, и тот, которыйВид карты на самом деле устанавливается (хотя я не видел пройденное myRegion
изменение):
MKCoordinateRegion myRegion = MKCoordinateRegionMakeWithDistance(userLocation, dist, dist);
NSLog(@"Passed: %f %f", myRegion.span.latitudeDelta, myRegion.span.longitudeDelta);
[self.mapView setRegion:myRegion animated:YES];
NSLog(@"Passed 2: %f %f", myRegion.span.latitudeDelta, myRegion.span.longitudeDelta);
NSLog(@"Set: %f %f", mapView.region.span.latitudeDelta, mapView.region.span.longitudeDelta);
> Passed: 0.005728 0.008702
> Passed 2: 0.005728 0.008702
> Set: 0.012957 0.013733
Если вы увеличите расстояние до 1200 м, вы сможете увидеть следующий уровень масштабирования.
Кстати, в вашем коде есть небольшая ошибка:
NSLog(@"distance to western boundary: %.2lfm", [centerRegion distanceFromLocation:north]);
должно быть
NSLog(@"distance to northern boundary: %.2lfm", [centerRegion distanceFromLocation:north]);