Неверный регион MKMapView в iOS 5 - PullRequest
1 голос
/ 19 ноября 2011

MKMapView возвращает неверный регион под iOS 5 - широта + широтаDelta / 2 превышает 100 и не должна превышать 90.

Кто-нибудь видел эту проблему?

Шаги для воспроизведения:

  1. Создание MKMapView
  2. Записать mapView.region в методе делегата regionDidChangeAnimated
  3. Уменьшите карту как можно дальше и перетащите ее вправо, чтобы вид прокручивался вверх / влево

Ожидаемые результаты: В iOS 4 разумно использовать mapView.region:

lat=2.202047 lon=-67.500000 latDelta=165.698164 lonDelta=225.000000

В iOS 5, однако, mapView.region выходит за пределы:

lat=17.978733 lon=-67.500000 latDelta=165.698164 lonDelta=225.000000

Широты должны быть в диапазоне от -90 до 90. Однако в iOS 5 значение lat + latDelta / 2 составляет 100,827815. Это невозможно. Хотя я могу зафиксировать значения в +/- 90, разница смещений вызывает проблемы с нашими оверлеями.

регрессия: Не бывает в iOS 4.3. Регулярно происходит в iOS 5. Снимки экрана видов карты выглядят одинаково, даже если центральная широта составляет 15 градусов.

Примечания: Файлы проекта и дампы экрана можно скачать здесь .

Ответы [ 2 ]

1 голос
/ 21 ноября 2011

Это, кажется, адекватный обходной путь.Вместо того чтобы читать свойство mapView.region, вместо этого вызовите этот метод:

@implementation MKMapView(fixedRegion)

-(MKCoordinateRegion) fixedRegion_
{
  // this call is broken on iOS 5, as is the region property, so don't use them
  // return( [self convertRect:self.bounds toRegionFromView:self] );

  CLLocationCoordinate2D topLeft = [self convertPoint:CGPointZero toCoordinateFromView:self];
  CLLocationCoordinate2D bottomRight = [self convertPoint:CGPointMake(self.bounds.size.width, self.bounds.size.height) toCoordinateFromView:self];

  MKCoordinateRegion region;
  region.center.latitude = (topLeft.latitude + bottomRight.latitude)/2;
  region.center.longitude = (topLeft.longitude + bottomRight.longitude)/2; 
  region.span.latitudeDelta = fabs( topLeft.latitude - bottomRight.latitude );
  region.span.longitudeDelta = fabs( topLeft.longitude - bottomRight.longitude );
  return region;
}
@end

Теперь можно утверждать (правильно!), Что этот код также не на 100% корректен, потому что значение центра проекции Меркатора вlon / lat на самом деле не на полпути между верхом и низом, но, поскольку это соответствует функциональности iOS 4 и сохраняет значения в допустимых пределах для карты, это работает для меня.

0 голосов
/ 19 ноября 2011

Используя категорию MKMapView + ZoomLevel, вам вообще не нужно будет задавать регион.

здесь очень хороший учебник по тому же

http://troybrant.net/blog/2010/01/set-the-zoom-level-of-an-mkmapview/

или

http://mayurbirari.wordpress.com/2011/02/07/how-to-access-mkmapkit-in-iphone/

После выполнения операции масштабирования / сжатия попробуйте загрузить регион в

      -(void) mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated

вместо

        regionDidChangeAnimated.

надеюсь, это поможет ..:)

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