MKMapView Увеличивает местоположение пользователя один раз, но не второй раз в приложении панели вкладок (iOS)
У меня есть MKMapView как часть контроллера навигации в приложении на основе панели вкладок.
Я нажимаю кнопку UIB на первом контроллере вида, и он выдвигается ко второму контроллеру вида, который содержит MKMapView. Когда представление карты загружается, оно увеличивает местоположение пользователя, используя:
- (void)mapView:(MKMapView *)theMapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
if ( !initialLocation )
{
self.initialLocation = userLocation.location;
MKCoordinateRegion region;
region.center = theMapView.userLocation.coordinate;
region.span = MKCoordinateSpanMake(2.0, 2.0);
region = [theMapView regionThatFits:region];
[theMapView setRegion:region animated:YES];
}
}
Когда я нажимаю кнопку "Назад" на контроллере навигации над MapView, а затем нажимаю кнопку "Назад" на карте, он больше не увеличивает текущее местоположение пользователя, а просто имеет значение полного уменьшения по умолчанию:
Вот картинка с видом во второй раз.
Я полагаю, что это будет работать правильно, если бы я мог как-то вызвать didUpdateUserLocation в методе viewDidAppear, но я не уверен, как это осуществить, так как didUpdateUserLocation является методом делегата.
Это правильный подход или есть другой подход, который я должен использовать для этого? Спасибо!
PS Я видел этот вопрос, но он немного отличается с использованием контроллера модального представления
1 ответ
Я хотел бы вытащить весь код масштабирования в свой собственный метод, который может быть отправлен из -viewDidAppear:
а также -mapView:didUpdateToUserLocation:
,
- (void)zoomToUserLocation:(MKUserLocation *)userLocation
{
if (!userLocation)
return;
MKCoordinateRegion region;
region.center = userLocation.location.coordinate;
region.span = MKCoordinateSpanMake(2.0, 2.0); //Zoom distance
region = [self.mapView regionThatFits:region];
[self.mapView setRegion:region animated:YES];
}
Затем в -viewDidAppear:
...
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self zoomToUserLocation:self.mapView.userLocation];
}
И в -mapView:didUpdateToUserLocation:
метод делегата...
- (void)mapView:(MKMapView *)theMapView didUpdateToUserLocation:(MKUserLocation *)location
{
[self zoomToUserLocation:location];
}