MKMapView уменьшает масштаб
Это мой небольшой метод, который берет текущее местоположение менеджера местоположений и фокусирует карту чуть выше него, чтобы освободить место для некоторых других подпредставлений, которые я добавил в верхнюю часть карты. Если значения широты / долготы промежутка становятся слишком большими (более 1,0), каждый раз, когда устанавливается регион, промежуток увеличивается и увеличивается до тех пор, пока карта не будет полностью уменьшена, даже не касаясь карты. Я думаю, что это как-то связано с повторным использованием диапазона вида карты, но я точно не знаю, что происходит.
- (void)setRegion {
CLLocationCoordinate2D coord = locationManager.location.coordinate;
MKCoordinateSpan span = mapView.region.span;
coord.latitude += 0.002 * (span.latitudeDelta / 0.012523);
MKCoordinateRegion region = MKCoordinateRegionMake(coord, span);
[mapViewGlobal setRegion:region animated:animated];
}
1 ответ
Из документов Apple: "Если вы хотите изменить координату центра без изменения уровня масштабирования, используйте вместо этого setCenterCoordinate: animated:". MKMapView
- (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated
MKMapView выберет новый регион, который хорошо соответствует переопределенному уровню масштабирования, при этом отображая весь целевой регион, и каждый раз, когда вы двигаетесь на север, диапазон изменяется, и все выходит из-под контроля.
Кроме того, ваш способ определения величины широты немного странный. Помимо умножения и деления, когда можно было бы выполнить трюк, он будет работать только на определенной широте (они растянуты от экватора) и на определенном уровне масштабирования. Было бы лучше определить, на сколько пикселей необходимо прокрутить карту (предположительно, на половину высоты ваших подпредставлений), а затем использовать эту функцию, чтобы определить, где вам нужно центрировать карту.
- (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view
Другой способ - поместить подвиды вне MKMapView, но это повлияет на вашу эстетику.