MKMapView: при запуске пользователя → масштабирование
У меня есть MKMapView
и в представлении карты "Показать местоположение пользователя". Вопрос, должен ли приложение использовать мое местоположение, я говорю "да". Затем я вижу голубую пулю, и я могу увеличить ее до текущего местоположения.
Я прочитал много других сообщений об этом, но ничто не решает проблему, что местоположение пользователя не будет автоматически увеличиваться.
Я хочу увеличить масштаб запуска, если пользователь разрешает доступ к местоположению, в противном случае определенная координата должна увеличиваться. (после того, как использование позволяет местоположение, оно может быть обновлено, но не должно устанавливать центр на каждый раз, когда я получаю обновления в местоположении).
Каковы шаги для реализации этого поведения? Я попытался например: Как увеличить MKMapView до текущего местоположения пользователей без CLLocationManager? с помощью KVO, но он не работает...
Надеюсь, у кого-то есть идея?
С наилучшими пожеланиями, Тим
Ответы
Ответ 1
Вы пробовали метод делегата mapView: didUpdateUserLocation:?
В моем коде я использовал что-то вроде этого:
В файле .h:
@property (nonatomic, retain) CLLocation* initialLocation;
И в файле .m:
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
if ( !initialLocation )
{
self.initialLocation = userLocation.location;
MKCoordinateRegion region;
region.center = mapView.userLocation.coordinate;
region.span = MKCoordinateSpanMake(0.1, 0.1);
region = [mapView regionThatFits:region];
[mapView setRegion:region animated:YES];
}
}
Ответ 2
вы можете сделать это, как это в своем viewDidLoad
, написать этот код
self.mapDetail.showsUserLocation = YES;
[self.mapDetail.userLocation addObserver:self
forKeyPath:@"location"
options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld)
context:nil];
и этот метод выполнит задачу
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
MKCoordinateRegion region;
region.center = self.mapDetail.userLocation.coordinate;
MKCoordinateSpan span;
span.latitudeDelta = 1; // Change these values to change the zoom
span.longitudeDelta = 1;
region.span = span;
[self.mapDetail setRegion:region animated:YES];
[self.mapDetail.userLocation removeObserver:self forKeyPath:@"location"];
}