Estou implementando o MKMapView e funciona bem quando o usuário carrega o aplicativo pela primeira vez, mas depois disso ele não atualiza os locais do usuário, mesmo quando o usuário volta do segundo plano.
Esta parte do meu código:
- (void)viewDidLoad
{
[super viewDidLoad];
self.mapView.delegate=self;
self.mapView.zoomEnabled = YES;
self.mapView.userTrackingMode = MKUserTrackingModeFollow;
self.mapView.zoomEnabled = YES;
self.mapView.showsUserLocation = YES;
}
Tentei implementar o código acima no viewWillAppear para ver se ele é recarregado toda vez que o usuário carrega o aplicativo, mas não funcionou.
algum de vocês conhece alguma idéia de como recarregar a visualização de mapa toda vez que o aplicativo é carregado?
Eu realmente aprecio sua ajuda.
Respostas:
1 para resposta № 1Você pode usar o método delegado abaixo para isso:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
}
0 para resposta № 2
É um pouco claro o que você quer dizer com "não atualiza a localização do usuário" e "recarrega", por isso estou assumindo que o que você deseja é centralizar novamente o mapa na localização atual do usuário ao recarregar.
Primeiro, para acionar as coisas, você precisará de código no método applicationDidBecomeActive: AppDelegate ou applicationWillEnterForeground:. Essa é a sua notificação "acionadora", na qual é possível iniciar a ação.
Em seguida, para os mais recentes na localização atual, algo como:
- (void) _putMapToCurrentlLocation
{
CLLocation* location = [[LocationManager sharedInstance] currentLocation];
MKCoordinateRegion newRegion;
newRegion.span.latitudeDelta = 0.13;
newRegion.span.longitudeDelta = 0.12;
newRegion.center.latitude = location.coordinate.latitude - (0.2*newRegion.span.latitudeDelta);
newRegion.center.longitude = location.coordinate.longitude;
[self.mapView setRegion:newRegion animated:YES];
self.mapView.showsBuildings = YES;
self.mapView.showsPointsOfInterest = YES;
self.mapView.showsUserLocation = YES;
}
Nota: A classe "LocationManager" é uma classe separada que só lida com o registro de notificações de localização do iOS e com a localização relatada mais recentemente. Se você precisar de ajuda com isso, é uma pergunta totalmente insana… :-)
0 para resposta № 3
Sua solução é a notificação. Tente implementar o abaixo
//appdelegate.m
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if([[UIApplication sharedApplication] applicationState]==UIApplicationStateActive)
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"applicationEnterForeground" object:self];
}
}
//yourViewController.m
- (void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadMapView) name:@"applicationEnterForeground" object:nil];
}
-(void)reloadMapView
{
NSLog(@"Reload your map view here");
}
-1 para resposta № 4
no seu ViewController "s viewDidLoad
método adicione um observador se o usuário estiver carregando o aplicativo novamente e escreva seu código no método para atualizar a visualização do mapa
[[NSNotificationCenter defaultCenter]addObserver:self
selector:@selector(yourMethod)
name:UIApplicationDidBecomeActiveNotification
object:nil];
no método dealloc remover observador
- (void) dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:Nil];
}