我正在实现 MKMapView,当用户第一次加载应用程序时工作正常,但之后即使用户从后台返回,它也不会刷新用户位置。
我的这部分代码:
- (void)viewDidLoad
{
[super viewDidLoad];
self.mapView.delegate=self;
self.mapView.zoomEnabled = YES;
self.mapView.userTrackingMode = MKUserTrackingModeFollow;
self.mapView.zoomEnabled = YES;
self.mapView.showsUserLocation = YES;
}
我尝试在viewWillAppear中实现上面的代码,以查看它是否会在每次用户加载应用程序时重新加载,但它不起作用。
你们中的任何人都知道如何在每次加载应用程序时重新加载地图视图?
我真的很感激你的帮助。
您可以使用以下委托方法:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
}
不清楚您所说的"不刷新用户位置"和"重新加载"是什么意思,所以我假设您想要的是重新加载时将地图重新居中用户当前位置。
首先,若要触发操作,需要 AppDelegate applicationDidBecomeActive: 或 applicationWillEnterForeground: 方法中的代码。这是您的"触发器"通知,您可以在其中启动操作。
然后,要重新居中当前位置,如下所示:
- (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;
}
注意:"LocationManager"类是我的一个单独的类,它只处理从iOS注册位置通知并保留最近报告的位置。如果您需要帮助,这是一个完整的"坚果问题... :-)
您的解决方案是通知。尝试实现以下内容
//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");
}
ViewController 的 viewDidLoad
方法中添加观察者,如果用户再次加载应用程序,并在方法中编写代码以刷新地图视图
[[NSNotificationCenter defaultCenter]addObserver:self
selector:@selector(yourMethod)
name:UIApplicationDidBecomeActiveNotification
object:nil];
在 Dealloc 方法中移除观察器
- (void) dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:Nil];
}